[英]PLSQL or SSRS, How to select having all values in a group?
我有一张这样的桌子。
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)
这将要求您确定列表中有多少值,以便在有2个元素时可以在HAVING
子句中使用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
我更喜欢将这些“查询集内”结构化为聚合体。 我发现这是最灵活的方法:
select t.*
from t
where t.name in (select name
from t
group by name
having sum(case when value = 'X' then 1 else 0 end) > 0 and
sum9case when value = 'Y' then 1 else 0 end) > 0
)
in
的子查询查找具有至少一个X值和一个Y值的所有名称。 使用相同的逻辑,很容易调整其他条件(X和Y和Z,; X和Y,但不是Z等)。 外部查询只返回所有行而不是名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.