簡體   English   中英

SQL選擇不同但詳盡的列

[英]SQL select distinct but exhaustive columns

我有一個包含2列的簡單表:

Col1 | Col2
-----+-----
1    | 3
1    | 4
2    | 3
2    | 4
... many more rows

我想返回這個:

Col1 | Col2
-----+-----
1    | 3
2    | 4

我不想要這樣:

Col1 | Col2
-----+-----
1    | 3
2    | 3

因為在Col2中3是重復的,也不是

Col1 | Col2
-----+-----
1    | 3
1    | 4

因為1在Col1中重復,所以也不是

Col1 | Col2
-----+----
1    | 3

因為現在Col2中缺少4。 換句話說,我不希望重復,但是我也不想忽略col2中的任何值(除非Col1中出現重復的情況,反之亦然)。 如何使用SQL來做我想做的事? 謝謝。

根據您給定的樣本數據進行工作

select col1,
case
when col1 =1 and col2 in (3,4) Then 3
when col1 =2 and col2 in (3,4) Then 4
end as col2
from table1
group by col1

有關更多詳細信息,請單擊此處。

我認為您需要這樣的查詢:

SELECT Col1, Col2
FROM 
    (SELECT dt.*, @rownum1 := @rownum1 + 1 AS rn
     FROM 
        (SELECT Col1
         FROM t
         GROUP BY Col1) dt,
        (SELECT @rownum1 := 0) r) t1
    LEFT OUTER JOIN
    (SELECT dt.*, @rownum2 := @rownum2 + 1 AS rn
     FROM 
        (SELECT Col2
         FROM t
         GROUP BY Col2) dt,
        (SELECT @rownum2 := 0) r) t2
    ON t1.rn = t2.rn
UNION ALL
SELECT Col1, Col2
FROM 
    (SELECT dt.*, @rownum3 := @rownum3 + 1 AS rn
     FROM 
        (SELECT Col2
         FROM t
         GROUP BY Col2) dt,
        (SELECT @rownum3 := 0) r) t1
    LEFT OUTER JOIN
    (SELECT dt.*, @rownum4 := @rownum4 + 1 AS rn
     FROM 
        (SELECT Col1
         FROM t
         GROUP BY Col1) dt,
        (SELECT @rownum4 := 0) r) t2
WHERE (t2.Col1 IS NULL);
  1. 您需要具有行號的Col1不同值。
  2. 您還需要帶有行號的Col2不同值。
  3. 現在,你可以設置一個FULL OUTER JOIN使用UNION ALL對這些不同的值ON行數量。

[ SQL Fiddle Demo ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM