数据透视表中的where子句

时间:2018-08-01 15:54:59

标签: sql database oracle db2 ibm-cloud

我在DB2(oracle语法)中有一个像这样的表,我们称它为SAMPLE

ID    TAG_NAME    VALUE
13    10          77
13    11          80
14    10          92
14    11          83

我想做的是选择TAG_NAME 10的值为77和TAG_NAME 11的值为80的所有行。我该怎么做?如果我在下面喜欢,它将尝试创建一种情况,其中TAG_NAME必须同时为10和11,而VALUE必须同时为77和80。我不想选择这些特定的标签名称,而是在选择标签时名称是x,那么它应该检查值是否是y等。

SELECT 
    * 
FROM 
    SAMPLE
WHERE
    (TAG_NAME=10 AND VALUE=77)
    AND (TAG_NAME=11 AND VALUE=80)

我要达到的结果是这样:

ID    TAG_NAME    VALUE
13    10          77
13    11          80

3 个答案:

答案 0 :(得分:1)

您可以使用group byhaving

SELECT s.id
FROM SAMPLE s
WHERE (TAG_NAME = 10 AND VALUE = 77) OR
      (TAG_NAME = 11 AND VALUE = 80)
GROUP BY s.id
HAVING COUNT(DISTINCT TAG_NAME) = 2;

答案 1 :(得分:1)

我不了解DB2,但是在Oracle中,您可以这样做:

select *
from   demo
where  (tag_name, value) in ((10,77), (11,80));

答案 2 :(得分:0)

我认为您说的是自己的问题:

  

如果我在下面喜欢的话,它将尝试创建TAG_NAME 必须同时为10和11,而VALUE必须同时为77和80

如果将其更改为“或”,它应该可以工作。

SELECT 
    * .
FROM 
    SAMPLE
WHERE
    (TAG_NAME=10 AND VALUE=77)
    OR (TAG_NAME=11 AND VALUE=80)
    OR (TAG_NAME=x AND VALUE=y)