2013-08-05 133 views
-1

我有這樣的sql db中的表。T-SQL將行拆分成多行?

Category Series Value 
    1  A 100 
    2  B 200 
    2  C 300 

如何選擇此項目?

Category Series Value 
    1  A 100 
    1  B 0 
    1  C 0 
    2  A 0 
    2  B 200 
    2  C 300 
+0

呃,你能解釋一下嗎? –

+0

是的,你通常可以用一個簡單的左外連接,但你首先需要告訴我們該行可以採用什麼值。換句話說,**在** 1,A,0行中的0是從哪裏來的? –

+0

哎呀。真正!我沒有解釋清楚。之後我做了一些編輯,這些編輯將確保事情清楚。類別1沒有像上面表格中的值B和C,但類別2具有值B和C,但沒有A.這是否有意義? – BusyBees

回答

2

爲了得到結果,您需要生成每個系列的所有類別的列表。您可以使用交叉連接來獲得結果:

select distinct c.category, s.series 
from yourtable s 
cross join yourtable c 

一旦你有了這個,那麼你就可以加入這個回你的桌子上都categoryseries

select sc.category, 
    sc.series, 
    coalesce(t.value, 0) value 
from 
(
    select distinct c.category, s.series 
    from yourtable s 
    cross join yourtable c 
) sc 
left join yourtable t 
    on sc.series = t.series 
    and sc.category = t.category; 

SQL Fiddle with Demo

+0

你搖滾!非常感謝。 – BusyBees