【发布时间】:2017-09-07 21:48:20
【问题描述】:
我有桌子 T1:
ID GROUPINFO STATUS
1 GROUP1 NEW
2 GROUP1 INPROG
3 GROUP2 INPROG
我也有 T2 桌
T2ID T1ID STATUS
1 1 NEW
2 2 NEW
3 2 VENDOR
4 3 NEW
5 3 VENDOR
我想按组计算这些记录中有多少状态为 NEW,以及这些记录中有多少处于状态 VENDOR(来自 T2 表的信息)
此 SQL 有效
SELECT T1.GROUPINFO,
count (case when T1.status='NEW' then 1 end) as New
FROM T1
GROUP BY T1.GROUPINFO
但是,当我尝试添加这些记录中有多少处于供应商状态时,我收到了一个错误:
SELECT T1.GROUPINFO,
count (case when T1.status='NEW' then 1 end) as New,
count (case when T1.ID in (select T2.ID from T2 where T2.status='VENDOR') then 1 end) as Vendor
FROM T1
GROUP BY T1.GROUPINFO
我收到一个错误:
糟糕的计划;找到未解析的 QNC
我不确定我做错了什么以及我应该如何组织我的 SQL 查询以便我可以得到这个示例的结果:
GROUPINFO NEW VENDOR
GROUP1 1 1
GROUP2 0 1
如果 ID 在 T2 中存在多次,则应仅计算 1 次,因为这是我要检查其是否处于该状态的一条记录。
更新: 我也试过 EXISTS:
SELECT T1.GROUPINFO,
count (case when T1.status='NEW' then 1 end) as New,
count (case when exists (select 1 from T2 where T2.ID=T1.ID and T2.status='VENDOR') then 1 end) as Vendor
FROM T1
GROUP BY T1.GROUPINFO
但再次出现 SQL 错误:关于 ID 列
更新: 我也尝试过 EXISTS 和 JOIN:
SELECT T1.GROUPINFO,
count (case when T1.status='NEW' then 1 end) as New,
count (case when exists (select 1 from T2 where T2.ID=T1.ID and T2.status='VENDOR') then 1 end) as Vendor
FROM T1 LEFT OUTER JOIN T2 ON T1.ID=T2.ID
GROUP BY T1.GROUPINFO
但再次出现 SQL 错误:关于 ID 列
【问题讨论】:
-
您可以在 id 上加入它们,而不是在 case 语句中尝试嵌套查询。您可能需要一个临时表先加入它们,然后您可以从该表中获得所需的结果
-
你能举个例子吗?因为看起来不是那么简单,所以我什至尝试了 JOIN 但非常重要的是我必须基于 GROUPINFO 列而不是 ID 列进行分组
-
我更新了我尝试过的内容,但又遇到了问题。如果您有某种解决方案,您能帮帮我吗?