PLSQL或SSRS,如何选择组中的所有值?
问题描述:
我有一张这样的桌子。PLSQL或SSRS,如何选择组中的所有值?
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
但我想看看里面有所有PARAMS名称的所有值。 因此,只有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,如果有两个元素,一个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
答
我宁愿查询作为aggregatino的“套中套”组织这些。我觉得这是最灵活的方法:
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等)。外部查询只是返回所有行而不是名称。
+0
这也是一个有用的解决方案,但我从SSRS发送参数作为列表,所以我不能单独使用X和Y.列表中的参数数量未知。不管怎么说,还是要谢谢你。 – Yetik 2013-03-22 09:04:21
谢谢,我试过第一个选项,它对我来说工作得很好。 – Yetik 2013-03-22 09:02:45