0

我有这个查询

select SUM(quantity) from Sales join Document on Sales.IdDocument = Document.IdDocument where (IdTipoDocumento = 'vco' or IdTipoDocumento = 'vcr') and IdArticulo = '01-00321' and IdListaEmpresa = 1000129
-
(select SUM(quantity) from Sales join Document on Sales.IdDocument = Document.IdDocument where IdTipoDocumento = 'dco'  and IdArticulo = '01-00321' and IdListaEmpresa = 1000129)

如果我分别运行每一行,则每个查询都可以正常工作(第一个查询结果为 419,第二个查询结果为 380),但如果我尝试运行整个查询以获得结果(419-380),它会告诉我“转换数据类型时出错varchar 到数字。”

他们都应该已经是数字(数量字段无论如何都是整数类型)所以我不知道为什么会出现错误......

4

1 回答 1

1

方法一:

SELECT
(select SUM(quantity) from Sales join Document on Sales.IdDocument = Document.IdDocument 
where (IdTipoDocumento = 'vco' or IdTipoDocumento = 'vcr') and IdArticulo = '01-00321' and 
IdListaEmpresa = 1000129)

-
(select SUM(quantity) from Sales join Document on Sales.IdDocument = Document.IdDocument 
where IdTipoDocumento = 'dco'  and IdArticulo = '01-00321' and IdListaEmpresa = 1000129)

方法二:

SELECT SUM(SQ)
FROM (
SELECT CASE WHEN (IdTipoDocumento = 'vco' or IdTipoDocumento = 'vcr') THEN SUM(Quantity)
WHEN IdTipoDocumento = 'dco' THEN -1*SUM(Quantity)
END AS SQ
FROM  Sales join Document on Sales.IdDocument = Document.IdDocument 
where (IdTipoDocumento IN ('vco', 'vcr','dco')) and IdArticulo = '01-00321' and 
IdListaEmpresa = '1000129'
GROUP BY IdTipoDocumento) AS T1

方法三:

SELECT SUM(CASE WHEN IdTipoDocumento IN ('vco', 'vcr') THEN Quantity ELSE -1*Quantity END)
AS SQ
FROM  Sales join Document on Sales.IdDocument = Document.IdDocument 
where (IdTipoDocumento IN ('vco', 'vcr','dco')) and IdArticulo = '01-00321' and 
IdListaEmpresa = 1000129

方法 3a:

   SELECT IdListaEmpresa, 
         SUM(CASE WHEN IdTipoDocumento IN ('vco', 'vcr') 
                  THEN Quantity 
                  ELSE -1*Quantity END) AS SQ
   FROM  Sales join Document on Sales.IdDocument = Document.IdDocument 
   WHERE (IdTipoDocumento IN ('vco', 'vcr','dco')) 
       AND IdArticulo = '01-00321' 
       AND IdListaEmpresa IN (1000129, 1000130, 1,2,3,4,5)
   GROUP BY IdListaEmpresa
于 2013-10-14T15:14:09.870 回答