[英]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);
Col1
不同值。 Col2
不同值。 FULL OUTER JOIN
使用UNION ALL
对这些不同的值ON
行数量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.