不確定標題是否有意義。如何選擇具有多個條件的行
但是,這正是我需要的,我壞在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;
謝謝:)第二種解決方案是什麼,我一直在尋找。萬分感謝! –