我正在尝试执行一个SQL查询,该查询生成一个表,其中两列引用相同的数据但使用不同的条件。我的结果查询需要包含以下列:
查询结果:
其中总数量是某个项目的总数,而可用是同一项目的子集,但只有那些被标记为“可用”的项目。< / p>
我试图使用以下形式的UNION:
SELECT
'0' as Quantity,
COUNT (item.pkid) as Available
FROM itemInstance, itemType
WHERE
itemInstance.availability = 'AVAILABLE'
AND itemInstance.type = itemType.primary_key
UNION
SELECT
COUNT (DISTINCT item.pkid) as Quantity,
'0' as Available
FROM itemInstance, itemType
WHERE itemInstance.type = itemType.primary_key
当然会产生类似的东西:
Quantity Available
1 0 2
2 4 0
3 0 3
4 7 0
当我真正想要的时候:
Quantity Available
1 4 2
2 7 3
任何帮助将不胜感激。谢谢!
答案 0 :(得分:5)
我认为我不了解您查询的所有方面,但它基本上应该像这样工作:
SELECT
COUNT(*) as Quantity,
SUM(CASE WHEN itemInstance.availability = 'AVAILABLE'
THEN 1
ELSE 0
END) As Available
FROM itemInstance, itemType
WHERE itemInstance.type = itemType.primary_key
每个匹配行CASE
为1
,非匹配行为0
,因此这些值的总和是可用项的数量。
BTW:您可能希望切换到显式连接表示法以获得更好的可读性(特别是对于更复杂的查询):
...
FROM itemInstance
JOIN itemType ON ( itemInstance.type = itemType.primary_key )