[英]Compare values from the same field in two different columns
我需要在一個表中並列放置兩部分,它們具有相同的描述和不同的“外部ID”。 輸入表如下所示:
+--+-------+-----------+
|ID|OUTERID|DESCRIPTION|
+--+-------+-----------+
|1 |1 |some desc 1|
+--+-------+-----------+
|2 |1 |some desc 2|
+--+-------+-----------+
|3 |1 |some desc 3|
+--+-------+-----------+
|4 |2 |some desc 2|
+--+-------+-----------+
|5 |2 |some desc 3|
+--+-------+-----------+
這是我要從選擇中實現的目標:
+-------------+-------------+
|DESCRIPTION_1|DESCRIPTION_2|
+-------------+-------------+
|some desc 1 |NULL |
+-------------+-------------+
|some desc 2 |some desc 2 |
+-------------+-------------+
|some desc 3 |some desc 3 |
+-------------+-------------+
我嘗試了一個簡單的JOIN,但是如您所見,我還需要顯示不匹配的值。
SELECT a.DESCRIPTION AS DESCRIPTION_1,
b.DESCRIPTION AS DESCRIPTION_2
FROM My_Table a
JOIN My_Table b on a.DESCRIPTION = b.DESCRIPTION
WHERE a.OUTERID = 1
AND b.OUTERID = 2
您需要dense_rank()
並進行條件聚合:
select max(case when OUTERID = 1 then DESCRIPTION end) as DESCRIPTION_1,
max(case when OUTERID = 2 then DESCRIPTION end) as DESCRIPTION_2
from (select t.*,
dense_rank() over (order by DESCRIPTION) as seq
from table t
) t
group by seq;
如果我理解正確,則可以使用完全外部聯接來執行此操作:
SELECT a.DESCRIPTION AS DESCRIPTION_1,
b.DESCRIPTION AS DESCRIPTION_2
FROM (SELECT a.*
FROM My_Table a
WHERE a.OUTERID = 1
) a FULL JOIN
(SELECT b.*
FROM My_Table b
WHERE b.OUTERID = 2
) b
ON a.DESCRIPTION = b.DESCRIPTION;
使用cte :(不過,我不確定為什么您需要同時顯示兩列而不是僅標識“重復項”)
表:
Create Table #tbl
(
ID Int,
OUTERID Int,
DESCRIPTION VarChar(20)
)
Insert Into #tbl Values
(1,1,'some desc 1'),
(2,1,'some desc 2'),
(3,1,'some desc 3'),
(4,2,'some desc 2'),
(5,2,'some desc 3')
CTE
With cte As
(
Select Description, Count(Distinct OuterID) As recs From #tbl
Group By Description
)
Select
Case When recs = 2 Or recs = 1 Then Description End As Description_1,
Case When recs = 2 Then Description End As Description_2
From cte
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.