sql - PLSQL 或 SSRS,如何选择将所有值都放在一个组中?

标签 sql oracle reporting-services plsql ssrs-2008

我有一张这样的 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/

相关文章:

sql - VBA Access 在保存新记录之前需要获取自动编号

mysql - 查找一对多连接表满足一个条件但不满足另一个条件的所有记录

sql - 表分区,哪个更好?

sql - 使用 SSRS 报告将 csv 列表传入 SQL 数据集的参数值

c# - 报告框架背后的基本原理

list - 如何在 List ,SSRS 2005 中创建多个组?

sql - 查询如何在sql中添加缺失的日期

mysql - 从重复行中选择最大值

java - 在集群环境中跨 JSP 应用程序共享 HashMap

linux - 无法使用外部表读取文件或使用 PL/SQL 使用 UTL_FILE 写入文件