我正在尝试为MS SQL Server编写一个查询,该查询返回数量为0的container_parent_id
:
Container_id | Container_name | container_parent_id | quantity | alive
----------------------------------------------------------------------
1 | ContA | 12345 | 2 | 1
2 | ContB | 12345 | 1 | 1
3 | ContC | 12345 | 0 | 1
4 | ContD | 12345 | 1 | 1
5 | ContA | 23456 | 1 | 1
6 | ContB | 23456 | 0 | 1
7 | ContC | 23456 | 1 | 1
8 | ContD | 34567 | 0 | 1
9 | ContE | 34567 | 0 | 1
在上述数据中,只应为34567返回 ContD 和 ContE 。
如果我按container_parent_id
分组并使用WHERE quanity = 0
,则结果会包含其他行。
这就是我一直在尝试的:
SELECT count(), container_parent_id from Container where quantity = 0 GROUP BY container_parent_id HAVING count() > 0
导致:
3 | ContC | 12345 | 0 | 1
6 | ContB | 23456 | 0 | 1
8 | ContD | 34567 | 0 | 1
9 | ContE | 34567 | 0 | 1
运行此查询或Renu / Stan建议的问题是,它将那些数量为0的容器作为子集返回。但是,我不希望前两个,因为他们有相同container_parent_id
的数量为1或2的其他容器。我的最终输出应该是:
8 | ContD | 34567 | 0 | 1
9 | ContE | 34567 | 0 | 1
即。每个container_parent_id只有数量为0的记录。
答案 0 :(得分:2)
这样的事情应该有效:
SELECT *
FROM Containers
WHERE
container_parent_id IN (
SELECT container_parent_id
FROM Containers
GROUP BY container_parent_id
HAVING sum(quantity) = 0
);
首先选择总共0个数量的所有父ID,然后将其用作嵌套查询,以获取具有这些ID作为父项的所有容器名称。
答案 1 :(得分:1)
SELECT T.*
FROM Container t
INNER JOIN (
SELECT container_parent_id,SUM(quantity) Tot
FROM Container
GROUP BY container_parent_id) g ON T.container_parent_id = G.container_parent_id
WHERE G.Tot=0
答案 2 :(得分:-1)
只需尝试一下,
SELECT container_parent_id FROM Container WHERE quantity=0