我有3個表名爲A,B和C.表A有列a。表B列a,b。表C列a,c。這些表中包含類似下面的數據:SQL JOIN或UNION還是什麼?
我想從A,B,C中的所有數據,其中a = 1
我的期望輸出應該如下:
但我從SSMS得到的結果如下:
我應該如何重構我的SQL來獲得我想要的輸出?
例如我不想在列中重複的值
我有3個表名爲A,B和C.表A有列a。表B列a,b。表C列a,c。這些表中包含類似下面的數據:SQL JOIN或UNION還是什麼?
我想從A,B,C中的所有數據,其中a = 1
我的期望輸出應該如下:
但我從SSMS得到的結果如下:
我應該如何重構我的SQL來獲得我想要的輸出?
例如我不想在列中重複的值
您需要加入這些值,但不僅在a
值上,而且在該位置上。 SQL表格表示無序集合。我將假定b
和c
列表示排序。
select a.a, b.b, c.c
from (select a.*, row_number() over (order by a) as seqnum
from a
) a full outer join
(select b.*, row_number() over (partition by a order by b) as seqnum
from b
) b
on a.a = b.a and a.seqnum = b.seqnum full outer join
(select c.*, row_number() over (partition by a order by c) as seqnum
from c
) c
on c.a = coalesce(a.a, b.a) and c.seqnum = coalesce(a.seqnum, b.seqnum)
where coalesce(a.a, b.a, c.a) = 1;
*「我不想在列中重複值」*您想要一個非常不尋常的東西,我認爲在SQL中創建所需的輸出是困難的和不可能的。你能解釋一下你正在操作的數據,它是如何關聯的,以及爲什麼這個特定的輸出格式必須是SQL查詢的結果? – Tomalak 2014-12-04 11:32:23
@Tomalak請看看我接受的** @ Gordon Linoff **的回答。可能是那**難**。但**不可能**? – autopilot 2014-12-06 03:21:17
「不可能」取決於所使用的數據庫服務器。你沒有回答我的問題。我真的很想知道這是什麼。對我來說,這看起來像一個數據庫設計錯誤和一般濫用關係數據庫範例。 – Tomalak 2014-12-06 05:17:11