Boa tarde a todos!!!!

Preciso de mais uma ajuda ae!!!

 Tenho sa seguinte QUERY:

    SELECT oi.codproduto_id, oi.codfabricante_id,

        isnull(Sum(OI.QTDEAPROVADA),0) as TOTAL
    FROM
        ORCAMENTO O, ORCAMENTOITEM OI, int_PromoPJ ipm
    WHERE
        oi.Codproduto_id = ipm.Codproduto_id and
        oi.CodFabricante_id = ipm.CodFabricante_id and
        OI.CODORCAMENTO_ID = O.CODORCAMENTO_ID AND
        o.filial = '02' and  O.Status <> 'CN' And OI.Status <> 'C'
        And O.DataOrcamento >= ipm.Dtinicio  
        And O.DataOrcamento < ipm.Dtvalidade
        And Left(ltrim(OI.LPrecoOrigem), 8) = 'Promoção'
    group by
        oi.codproduto_id, oi.codfabricante_id
    having
        isnull(Sum(OI.QTDEAPROVADA),0) <> isnull(sum(ipm.QtdeOrc),0)

Então transformei ela em um UPDATE:

    UPDATE ipm SET
        QtdeOrc = isnull(Sum(OI.QTDEAPROVADA),0)
    FROM
        ORCAMENTO O, ORCAMENTOITEM OI, int_PromoPJ ipm
    WHERE
        oi.Codproduto_id = ipm.Codproduto_id and
        oi.CodFabricante_id = ipm.CodFabricante_id and
        OI.CODORCAMENTO_ID = O.CODORCAMENTO_ID AND
        o.filial = '02' and  O.Status <> 'CN' And OI.Status <> 'C'
        And O.DataOrcamento >= ipm.Dtinicio  
        And O.DataOrcamento < ipm.Dtvalidade
        And Left(ltrim(OI.LPrecoOrigem), 8) = 'Promoção'
    having
        isnull(Sum(OI.QTDEAPROVADA),0) <> isnull(sum(ipm.QtdeOrc),0)

 

Porém ocorre o erro:

Incorrect syntax near the keyword 'having'.

E ai.. alguma ajuda???

Exibições: 211

As respostas para este tópico estão encerradas.

Respostas a este tópico

Olá acho que isso pode te ajudar....

http://stackoverflow.com/questions/11962347/sql-update-with-case-gr...

https://msdn.microsoft.com/en-us/library/ms177673.aspx

Obs.: Todos os exemplos que encontrei o HAVING está vindo depois de um GROUP BY

Exemplo 1:

UPDATE stu stu
SET stu.tru = SET stu.tru =
CASECASE
When COUNT(*) = 3 Then 'Letter 1'When COUNT(*) = 3 Then 'Letter 1'
When COUNT(*) = 4 Then 'Letter 2'When COUNT(*) = 4 Then 'Letter 2'
When COUNT(*) = 5 Then 'Letter 3'When COUNT(*) = 5 Then 'Letter 3'
ELSE 'SARB'ELSE 'SARB'
END END
FROM stu JOIN attFROM stu JOIN att
on (stu.sc = att.sc and stu.sn = att.sn)on (stu.sc = att.sc and stu.sn = att.sn)
WHERE ATT.AL in ('c','t','u')WHERE ATT.AL in ('c','t','u')
GROUP BY stu.sc, stu.snGROUP BY stu.sc, stu.sn
HAVING COUNT(*) >= 3HAVING COUNT(*) >= 3

Exemplo 2:

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
WHERE LastName='Davolio' OR LastName='Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;

Exemplo 3:

SELECT [Product ID], COUNT(*) AS Total FROM [Order Details] GROUP BY [Product ID] HAVING (COUNT(*) > 50)

Vlw mesmo Clayton

Deu certinho...

Ai vai o código:

WITH CTE AS (
    SELECT TOP 2 oi.codproduto_id, oi.codfabricante_id, isnull(Sum(OI.QTDEAPROVADA),0) as TOTAL
    FROM
        ORCAMENTO O, ORCAMENTOITEM OI, int_PromoPJ ipm
    WHERE
        oi.Codproduto_id = ipm.Codproduto_id and
        oi.CodFabricante_id = ipm.CodFabricante_id and
        OI.CODORCAMENTO_ID = O.CODORCAMENTO_ID AND
        o.filial = '02' and  O.Status <> 'CN' And OI.Status <> 'C'
        And O.DataOrcamento >= ipm.Dtinicio  
        And O.DataOrcamento < ipm.Dtvalidade
        And Left(ltrim(OI.LPrecoOrigem), 8) = 'Promoção'
    group by
        oi.codproduto_id, oi.codfabricante_id
    having
        isnull(Sum(OI.QTDEAPROVADA),0) <> isnull(sum(ipm.QtdeOrc),0)
)
UPDATE ipm2 SET
    ipm2.QtdeOrc = CTE.Total
FROM
    int_PromoPJ ipm2 , CTE
WHERE
    CTE.Codproduto_id = ipm2.Codproduto_id and
    CTE.CodFabricante_id = ipm2.CodFabricante_id



Clayton Junior disse:

Olá acho que isso pode te ajudar....

http://stackoverflow.com/questions/11962347/sql-update-with-case-gr...

https://msdn.microsoft.com/en-us/library/ms177673.aspx

Obs.: Todos os exemplos que encontrei o HAVING está vindo depois de um GROUP BY

Exemplo 1:

UPDATE stu stu
SET stu.tru = SET stu.tru =
CASECASE
When COUNT(*) = 3 Then 'Letter 1'When COUNT(*) = 3 Then 'Letter 1'
When COUNT(*) = 4 Then 'Letter 2'When COUNT(*) = 4 Then 'Letter 2'
When COUNT(*) = 5 Then 'Letter 3'When COUNT(*) = 5 Then 'Letter 3'
ELSE 'SARB'ELSE 'SARB'
END END
FROM stu JOIN attFROM stu JOIN att
on (stu.sc = att.sc and stu.sn = att.sn)on (stu.sc = att.sc and stu.sn = att.sn)
WHERE ATT.AL in ('c','t','u')WHERE ATT.AL in ('c','t','u')
GROUP BY stu.sc, stu.snGROUP BY stu.sc, stu.sn
HAVING COUNT(*) >= 3HAVING COUNT(*) >= 3

Exemplo 2:

SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
WHERE LastName='Davolio' OR LastName='Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;

Exemplo 3:

SELECT [Product ID], COUNT(*) AS Total FROM [Order Details] GROUP BY [Product ID] HAVING (COUNT(*) > 50)

RSS

© 2017   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço