繁体   English   中英

PLSQL或SSRS,如何选择组中的所有值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM