繁体   English   中英

在 sql 自加入时删除重复的行

[英]remove repeated rows while self join in sql

我正在尝试根据同一表上的连接从行中删除重复值,但无法删除 table1 中映射到 table2 中同一列的一列中的一个值。

表:注意:表中不限于只有一个日期,可以有多个带有多个sid的日期

date    | sid | comp | disc
-----------------------
23 june | 1  | az  | 20
23 june | 1  | ph  | 22
23 june | 1  | mg  | 10
23 june | 2  | mg  | 8
23 june | 3  | ph  | 15
23 june | 3  | az  | 11
------------------------

自我加入

select t1.*, t2.comp as comp1, t2.disc as disc1
from table as t1
left join table as t2 on t1.date = t2.date and t1.sid = t2.sid and t1.comp <> t2.comp
Output from above query:

date    | sid | comp | disc | comp1 | disc1
-------------------------------------------
23 june | 1  | az  | 20     | ph    | 22
23 june | 1  | az  | 20     | mg    | 10
23 june | 1  | ph  | 22     | az    | 20
23 june | 1  | ph  | 20     | mg    | 10
23 june | 1  | mg  | 10     | mg    | 10
23 june | 2  | mg  | 10     | null  | null
23 june | 3  | ph  | 10     | az    | 11
23 june | 3  | az  | 11     | ph    | 10

预期结果:(这里我试图获取 comp 和 comp1 的组合,其中对于每个 sid 和日期,不同的 comp 值仅映射为 mg 并且如果 sid 只有 mg 或非 mg 值,则 comp1 中的 null)注意:没有重复的行当 comp 映射到 comp1

date    | sid | comp | disc | comp1 | disc1
-------------------------------------------
23 june | 1  | az  | 20     | mg    | 10
23 june | 1  | ph  | 20     | mg    | 10
23 june | 2  | mg  | 10     | null  | null
23 june | 3  | ph  | 10     | null  | null
23 june | 3  | az  | 11     | null  | null

见分贝<>小提琴

WITH cte AS (
SELECT t1.*, t2.comp as comp1, t2.disc as disc1, SUM(1) OVER(PARTITION BY date,sid,comp) AS cnt
FROM `table` t1
LEFT JOIN `table` t2 ON t1.date = t2.date AND t1.sid = t2.sid AND t1.comp <> t2.comp 
)

SELECT 
  date, sid, comp, disc, 
  CASE WHEN comp1 <> 'mg' THEN NULL ELSE comp1 END AS comp1, 
  CASE WHEN comp1 <> 'mg' THEN NULL ELSE disc1 END AS disc1
FROM cte
WHERE
 (CASE WHEN comp <> 'mg' OR comp1 IS NULL THEN cnt END) = 1
 OR 
 (CASE WHEN comp <> 'mg' AND comp1 = 'mg' THEN cnt END) >= 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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