不确定标题是否有意义。如何选择具有多个条件的行
但是,这正是我需要的,我坏在SQL:
我有表具有以下数据
ID| Value
------ | ------
1| A
1| B
1| C
1| D
2| A
2| B
2| C
我需要O/P为
2 A
2 B
2 C
使用选择ID (A,B,C)和不在(D) 中的值给出了o/p,因为
1 A
1 B
1 C
2 A
2 B
2 C
需要选择标识的具有A,B,C,但不是D.
不确定标题是否有意义。如何选择具有多个条件的行
但是,这正是我需要的,我坏在SQL:
我有表具有以下数据
ID| Value
------ | ------
1| A
1| B
1| C
1| D
2| A
2| B
2| C
我需要O/P为
2 A
2 B
2 C
使用选择ID (A,B,C)和不在(D) 中的值给出了o/p,因为
1 A
1 B
1 C
2 A
2 B
2 C
需要选择标识的具有A,B,C,但不是D.
如果你想拥有一个或A,B,C更多的价值,而不是d行:
select *
from your_table
where value in ('A', 'B', 'C')
and id not in (
select id
from your_table
where value = 'D'
);
如果你想所有的三个值A,B,C必须存在该ID和而不D.
select id,
value
from (
select t.*,
count(distinct value) over (partition by id) n
from your_table t
where value in ('A', 'B', 'C')
and id not in (
select id
from your_table
where value = 'D'
)
)
where n = 3;
如果你想获得具有行只有A,B,C(和他们所有的公关ESENT),然后使用:
select id,
value
from (
select t.*,
count(case
when value not in ('A', 'B', 'C')
then 1
end) over (partition by id) n,
count(distinct case
when value in ('A', 'B', 'C')
then value
end) over (partition by id) n2
from your_table t
)
where n = 0
and n2 = 3;
select id, value
from my_table
where value in ('A','B','C')
and id = 2
可以使用条件聚集在HAVING
条款跨行过滤每个id
:
SELECT id
FROM table1
GROUP BY id
HAVING MAX(CASE WHEN value = 'A' THEN 1 ELSE 0 END) = 1
AND MAX(CASE WHEN value = 'B' THEN 1 ELSE 0 END) = 1
AND MAX(CASE WHEN value = 'C' THEN 1 ELSE 0 END) = 1
AND MAX(CASE WHEN value = 'D' THEN 1 ELSE 0 END) = 0
这将显示您这id
值符合您的标准,如果你需要你可以把它放进一个子查询,并将其加入到你的表以获取所有的行,即id
:
SELECT a.*
FROM table1 a
JOIN ( SELECT id
FROM table1
GROUP BY id
HAVING MAX(CASE WHEN value = 'A' THEN 1 ELSE 0 END) = 1
AND MAX(CASE WHEN value = 'B' THEN 1 ELSE 0 END) = 1
AND MAX(CASE WHEN value = 'C' THEN 1 ELSE 0 END) = 1
AND MAX(CASE WHEN value = 'D' THEN 1 ELSE 0 END) = 0
) b
ON a.id = b.id
从你的问题,我明白,要找到Value
列的值,其中值为A, B, C
,但Value
不等于D
。然后简单地将这3个值放在IN
运算符中。我将在没有D
的情况下检索结果集。
查询
SELECT COUNT(Value) count, Value
FROM your_table_name
WHERE Value in ('A', 'B', 'C')
GROUP BY Value;
谢谢:)第二种解决方案是什么,我一直在寻找。万分感谢! –