我有一個包含元素串列的表格,這些元素具有由一個關系確定的“創建者型別”。此關系欄位值可以是 1-2-3。
我必須使用以下條件進行 sql 查詢:
- 獲取所有值為 1 和(2 或 3)的元素
- 忽略值為 1 而沒有 2 或 3 的元素。
時間表
ID|NAMEUNIQUE|STARTTIME|ENDTIME|STATUS|CREATOR|CREATOR_TYPE
1 |AAAAAAAAAA|.........|.......|......|.......|1
2 |BBBBBBBBBB|.........|.......|......|.......|2
3 |BBBBBBBBBB|.........|.......|......|.......|1
4 |CCCCCCCCCC|.........|.......|......|.......|3
5 |DDDDDDDDDD|.........|.......|......|.......|1
在這種情況下,查詢應該回傳 ID 為 2、3、4、5 的行并丟棄 1,因為這是一個唯一的時間表 (AAAAAAAAA),沒有創建者型別 2 或 3。
對不起我的英語,很難向我解釋這個
uj5u.com熱心網友回復:
您可以在分析函式中使用條件聚合:
SELECT *
FROM (
SELECT s.*,
COUNT(CASE creator_type WHEN 1 THEN 1 END)
OVER (PARTITION BY nameunique) AS num_1s,
COUNT(CASE creator_type WHEN 2 THEN 1 END)
OVER (PARTITION BY nameunique) AS num_2s,
COUNT(CASE creator_type WHEN 3 THEN 1 END)
OVER (PARTITION BY nameunique) AS num_3s
FROM schedules s
)
WHERE num_1s > 0
AND (num_2s > 0 OR num_3s > 0);
其中,對于樣本資料:
CREATE TABLE schedules (id, nameunique, creator_type) AS
SELECT 1, 'AAAAA', 1 FROM DUAL UNION ALL
SELECT 2, 'BBBBB', 2 FROM DUAL UNION ALL
SELECT 3, 'BBBBB', 1 FROM DUAL UNION ALL
SELECT 4, 'CCCCC', 1 FROM DUAL UNION ALL
SELECT 5, 'CCCCC', 3 FROM DUAL UNION ALL
SELECT 6, 'DDDDD', 1 FROM DUAL;
輸出:
ID NAMEUNIQUE CREATOR_TYPE NUM_1S NUM_2S NUM_3S 2 BBBB 2 1 1 0 3 BBBB 1 1 1 0 4 中國交建 1 1 0 1 5 中國交建 3 1 0 1
db<>在這里擺弄
uj5u.com熱心網友回復:
select *
from (
select s.*,
min(creator_type) over (partition by nameunique) as min_type,
max(creator_type) over (partition by nameunique) as max_type
from schedules s
)
where min_type = 1 and max_type > 1
;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330503.html
