我有一张这样的 table 。
ID NAME VALUE
______________
1 A X
2 A Y
3 A Z
4 B X
5 B Y
6 C X
7 C Z
8 D Z
9 E X
和查询:
SELECT * FROM TABLE1 T WHERE T.VALUE IN (X,Z)
这个查询给了我
ID NAME VALUE
______________
1 A X
3 A Z
4 B X
6 C X
7 C Z
8 D Z
9 E X
但我想查看具有所有参数的名称的所有值。 所以,只有 A 和 C 同时具有 X 和 Z 值,我想要的结果是:
ID NAME VALUE
______________
1 A X
2 A Y
3 A Z
6 C X
7 C Z
我怎样才能得到想要的结果?无论是使用 sql 还是使用报告服务。也许“GROUP BY ..... HAVING”子句会有所帮助,但我不确定。
顺便说一句,我不知道列表中会有多少参数。
非常感谢任何帮助。
最佳答案
标准的方法是这样的
SELECT id, name, value
FROM table1 a
WHERE name IN (SELECT name
FROM table1 b
WHERE b.value in (x,y)
GROUP BY name
HAVING COUNT(distinct value) = 2)
这将需要您确定列表中有多少个值,以便您可以在 HAVING
子句中使用 2 如果有 2 个元素,如果有 5 个元素则使用 5,等等。您还可以使用分析函数
SELECT id, name, value
FROM (SELECT id,
name,
value,
count(distinct value) over (partition by name) cnt
FROM table1 t1
WHERE t1.value in (x,y))
WHERE cnt = 2
关于sql - PLSQL 或 SSRS,如何选择将所有值都放在一个组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552361/