针对2列的SQL检查

时间:2016-06-30 11:02:18

标签: sql sorting sql-server-2016

我有一个包含1,362种不同商品的数据库,可存储在112个不同仓库中的任何一个。

我想写一些东西,它会返回所有不同仓库中股票价值为0的每件商品的名称。

我已经拥有以下内容:

SELECT OITW.[ItemCode] AS [Item Code], INV1.[Dscription] AS [Description],
       OITW.[WhsCode] AS [Warehouse], SUM(OITW.[OnHand]) AS [On Hand]
FROM OITW
  INNER JOIN INV1 ON INV1.[ItemCode] = OITW.[ItemCode] 
WHERE INV1.[Dscription] LIKE 'BA SQUID ASSASSIN -Case%'
GROUP BY OITW.[ItemCode], INV1.[Dscription], OITW.[WhsCode]
ORDER BY [Warehouse], [On Hand]

返回:

enter image description here

此项目不适用,例如,它有两个仓库中的库存。

我希望这个问题有道理。如果没有,请告诉我,我会尽力澄清。

1 个答案:

答案 0 :(得分:1)

假设股票价值从不为负,您可以这样做:

SELECT INV1.[ItemCode] AS [Item Code], INV1.[Description] AS [Description],
FROM OITW INNER JOIN
     INV1
     ON INV1.[ItemCode] = OITW.[ItemCode] 
WHERE INV1.[Description] LIKE 'BA SQUID ASSASSIN -Case%'
GROUP BY OITW.[ItemCode], INV1.[Description], 
HAVING MAX([ON HAND]) = 0;

您的查询中的更改:

  • GROUP BY仅包括项目和说明,而不包括仓库和现有金额。
  • 修改SELECT以匹配GROUP BY
  • HAVING条款强制执行您的条件。
  • 我建议你不要在表名中加上空格。使用简单名称,因此无需转义列名称。