组合SQL Union查询行

Rob*_*erd 2 sql

我正在尝试执行一个SQL查询,该查询生成一个表,其中两列引用相同的数据但使用不同的条件.我的结果查询需要包含以下列:

查询结果:

  • 总数(量
  • 可用数量

其中总数量是某个项目的总数,可用是同一项目的子集,但只有那些标记为"可用"的项目.

我试图使用以下形式的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
Run Code Online (Sandbox Code Playgroud)

这当然会产生类似的东西:

  Quantity  Available
1    0          2
2    4          0
3    0          3
4    7          0
Run Code Online (Sandbox Code Playgroud)

当我真的想要:

  Quantity  Available
1    4          2
2    7          3
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢!

Pet*_*ang 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
Run Code Online (Sandbox Code Playgroud)

CASE1为每个配套配件行和0不-配套配件行,因此这些值的总和是可用的项目数.

顺便说一句:您可能希望切换到显式连接表示法以获得更好的可读性(尤其是对于更复杂的查询):

...
FROM itemInstance
JOIN itemType ON ( itemInstance.type = itemType.primary_key )
Run Code Online (Sandbox Code Playgroud)