2013-10-14 37 views
0

如果我单独运行的每一行我有这个疑问错误转换VARCHAR到数字在SQL减查询

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转换为数字时出错”。

他们都应该已经是数字(数量字段是整数类型反正),所以我不知道为什么错误出来......

+0

什么是你的错误号码? –

+0

@MuhammedAli Msg 8114,Level 16,State 5,Line 1 – ConnorU

+0

“IdListaEmpresa”的数据类型是什么? – RBarryYoung

回答

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) 

方法2:

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 

方法3:

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 
+0

同样的错误。我认为它可能会将每个总和(数量)的结果保存为变量而不是数字? – ConnorU

+0

你可以更新你的sql语句添加单引号到IdListaEmpresa像'IdListaEmpresa ='1000129'' –

+0

我试过了。没有区别,错误依然存在,IdListaEmpresa是数字反正... – ConnorU