如何在SQL中將一行分爲兩行?將一行分成兩行
比方說,我有列
Name, Time, Model
,我有一排如'Nick', 1:00, 2010
。另外型號可以是2010或2012年
我怎樣才能使這樣我就會有
'Nick', NULL, 2012
'Nick', 1:00, 2010
,而不只是一個排。基本上,我需要爲我的表中的所有行執行類似這樣的操作,其中列出未在日期部分下列出的具有NULL值的新行的模型。
謝謝!
如何在SQL中將一行分爲兩行?將一行分成兩行
比方說,我有列
Name, Time, Model
,我有一排如'Nick', 1:00, 2010
。另外型號可以是2010或2012年
我怎樣才能使這樣我就會有
'Nick', NULL, 2012
'Nick', 1:00, 2010
,而不只是一個排。基本上,我需要爲我的表中的所有行執行類似這樣的操作,其中列出未在日期部分下列出的具有NULL值的新行的模型。
謝謝!
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
這也行得通。如果需要,您可以添加更多年份到像(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 |
這很好,但我可以看到這是一個性能打擊,因爲它使用了交叉連接(我實際上試圖用更大的數據集進行操作)。我想我會爲自己嘗試一下,看看會發生什麼。 – Glassjawed
樣本數據請。我不清楚你的問題。 – fancyPants
你的模型是逗號分隔的年份? –
也許會把桌子的'聯合'變成自己? – cha0site