2017-04-17 48 views
0

我一直在检查堆栈溢出几个职位对这个错误,我也拿到了,而我试图添加一个SQL查询检索列tblAR.ARID如下:如何解决错误:将值赋给变量的SELECT语句不能与数据检索结合使用?

SELECT tblAR.ARID, 
@GP = (Sum(ard.Amount)) 
-(Sum((CASE WHEN MaterialNumber='REBATE' THEN [qty] 
      WHEN ard.Amount<0 THEN -1*ABS([qty]) 
      ELSE ABS([qty]) 
     END))) 
FROM 
tblMMMaterials mm 
INNER JOIN tblARDetail ard ON mm.MatID = ard.MatID 
INNER JOIN tblAR arh ON ard.ARID = arh.ARID 
WHERE [email protected] 

我才知道我不能在单个查询中都做。所以,我分了查询分为两个如下:

SELECT 
@GP = (Sum(ard.Amount)) 
-(Sum((CASE WHEN MaterialNumber='REBATE' THEN [qty] 
      WHEN ard.Amount<0 THEN -1*ABS([qty]) 
      ELSE ABS([qty]) 
     END))) 
FROM 
tblMMMaterials mm 
INNER JOIN tblARDetail ard ON mm.MatID = ard.MatID 
INNER JOIN tblAR arh ON ard.ARID = arh.ARID 
WHERE [email protected] 

select tblAR.ARID from tblAR 
WHERE [email protected] 

虽然没有给我任何的错误,我没有信心,如果这后面的SQL代码是100%的理想选择。换句话说,我想知道是否足以在第二个查询中包含'WHERE'条件,即WHERE [email protected]。请帮忙

+0

这不一定是相同的,因为'INNER JOIN's可以过滤或者取决于对这些表中的数据中的某些行相乘。如果你解释你真正想做的事情会更好 – Lamak

+0

@Lamak:非常感谢回复。实际上,我需要属于'rundate'的ARID并满足它为'GP'所做的一切。我不确定我是否也需要包含这些内部连接。所以,我最终只包括条件。这给了我一堆ARID – toofaced

回答

0

不,他们不一样,因为你有JOIN参与查询。您可以重复查询虽然喜欢

SELECT 
@GP = (Sum(ard.Amount)) 
-(Sum((CASE WHEN MaterialNumber='REBATE' THEN [qty] 
      WHEN ard.Amount<0 THEN -1*ABS([qty]) 
      ELSE ABS([qty]) 
     END))) 
FROM 
tblMMMaterials mm 
INNER JOIN tblARDetail ard ON mm.MatID = ard.MatID 
INNER JOIN tblAR arh ON ard.ARID = arh.ARID 
WHERE [email protected]; 

SELECT tblAR.ARID 
FROM 
tblMMMaterials mm 
INNER JOIN tblARDetail ard ON mm.MatID = ard.MatID 
INNER JOIN tblAR arh ON ard.ARID = arh.ARID 
WHERE [email protected] 
相关问题