我有一个名为(sale)的表:
| 范畴|数量|通货|
| - ------| - ------| - ------|
| 第1类|一万|美元|
| 第2类|五千|排减单位|
| 第三类|一万五千|合成孔径雷达|
| 第2类|三万|美元|
| 第1类|四万五千|合成孔径雷达|
| 第三类|七千|排减单位|
| 第2类|三千|排减单位|
| 第四类|无|美元|
我编写此查询是为了获得下表中的结果:注意:查询具有来自同一个表的子查询:
SELECT S.[Category]
,(SELECT ISNULL(SUM([Amount]),0)
FROM SALE
WHERE [Currency] = 'USD'
AND SALE.[CategoryID] = S.[CategoryID]) AS 'Total_USD'
,(SELECT ISNULL(SUM([Amount]),0)
FROM SALE
WHERE [Currency] = 'ERU'
AND SALE.[CategoryID] = S.[CategoryID]) AS 'Total_ERU'
,(SELECT ISNULL(SUM([Amount]),0)
FROM SALE
WHERE [Currency] = 'SAR'
AND SALE.[CategoryID] = s.[CategoryID]) AS 'Total_SAR'
FROM Sale AS S
GROUP BY S.[CategoryID],S.[CategoryName]
结果:
| 范畴|美元共计|排减单位共计|SAR总计|
| - ------| - ------| - ------| - ------|
| 第1类|一万|无|四万五千|
| 第2类|三万|八千|无|
| 第三类|无|七千|一万五千|
| 第四类|无|无|无|
我的问题是:如果所有子查询返回(空或零)值,如何避免(0)值,如上面的(cat4)。
我尝试了(Having)子句,但我必须在(Having)中重新编写所有子查询,这不是一件好事。
1条答案
按热度按时间qv7cva1a1#
如果您切换到条件聚集(无论如何,这会更有性能),则可以使用
HAVING
。由于您希望排除包含'EUR'
的行,因此需要在其中使用CASE
表达式:由于货币
'EUR'
似乎是一个印刷错误,您可能需要: