2013-05-28 63 views
0

如何在SQL中將一行分爲兩行?將一行分成兩行

比方說,我有列

Name, Time, Model 

,我有一排如'Nick', 1:00, 2010。另外型號可以是2010或2012年

我怎樣才能使這樣我就會有

'Nick', NULL, 2012 
'Nick', 1:00, 2010 

,而不只是一個排。基本上,我需要爲我的表中的所有行執行類似這樣的操作,其中列出未在日期部分下列出的具有NULL值的新行的模型。

謝謝!

+0

樣本數據請。我不清楚你的問題。 – fancyPants

+0

你的模型是逗號分隔的年份? –

+0

也許會把桌子的'聯合'變成自己? – cha0site

回答

0
SELECT name, 
     CASE q.id WHEN 1 THEN time END time, 
     CASE q.id WHEN 1 THEN model ELSE '2012' END model 
FROM (
     SELECT 1 
     UNION ALL 
     SELECT 2 
     ) q (id) 
CROSS JOIN 
     mytable 
0

這也行得通。如果需要,您可以添加更多年份到像(2011),(2013)這樣的價值清單,以獲得這些年份的預期結果。

Fiddle example(實施例的數據類型可以是你的不同)

select name, 
     case when t1.model = t2.year then t1.time end time, 
     year 
from temp t1 
    cross join (values (2010),(2012)) as t2(year) 
order by t2.year desc 

| NAME |  TIME | YEAR | 
-------------------------- 
| Nick | 01:00:00 | 2010 | 
| Nick | (null) | 2012 | 
+0

這很好,但我可以看到這是一個性能打擊,因爲它使用了交叉連接(我實際上試圖用更大的數據集進行操作)。我想我會爲自己嘗試一下,看看會發生什麼。 – Glassjawed