2012-10-17 55 views
1

我有這個表:Sql服務器按組加入?

id | type |  date  
1 | a | 01/1/2012 
2 | b | 01/1/2012 
3 | b | 01/2/2012 
4 | b | 01/3/2012 
5 | a | 01/5/2012 
6 | b | 01/5/2012 
7 | b | 01/9/2012 
8 | a | 01/10/2012 

的POV是每日期。如果2行包含相同的日期,那麼兩行將在同一行(左連接)中可見。

同一日期最多可以共享2行。

所以這種情況不可能是:

1 | a | 01/1/2012 
2 | b | 01/1/2012 
3 | a | 01/1/2012 

如果在同一天有一羣ab表明兩者在使用左單行加入

如果到目前爲止,僅爲a組,顯示爲單行(+ null在右側一側)

如果在日期th ERE只有B組,它顯示爲單線(+空在側)

期望的結果:

Date   |typeA|typeB |a'id|b'id 
    01/1/2012  | a | b | 1 | 2 
    01/2/2012  |  | b | | 3 
    01/3/2012  |  | b | | 4 
    01/5/2012  | a | b | 5 | 6 
    01/9/2012  |  | b | | 7 
    01/10/2012 | a |  | 8 | 

我知道這個假設是簡單的,但加入這裏的主錨是日期。 我遇到的問題是當我閱讀第1行時,我在表中搜索所有具有相同日期的行...很好。 - 沒關係。

但是,當我讀到第二行,我也行,而且它產生的第一行 - 這已經計數......

任何幫助嗎?

這裏是SQL小提琴:

http://data.stackexchange.com/stackoverflow/query/edit/82605

回答

1

我想你想一個pivot

select 
    [date], 
    case when [a] IS null then null else 'a' end typea, 
    case when [b] IS null then null else 'b' end typeb, 
    a as aid, 
    b as bid 
from yourtable src 
pivot (max(id) for type in ([a],[b]))p 

如果你想加入做..

select ISNULL(a.date, b.date), a.type,b.type, a.id,b.id 
from 
(select * from yourtable where type='a') a 
    full outer join 
(select * from yourtable where type='b') b 
    on a.date = b.date 
+0

謝謝。有沒有_join_解決方案? –

+0

@RoyiNamir是的。請參閱編輯。 – podiluska

+1

oh sh ** - 你是怎麼做到的?... ...你很棒。 –