如何在SQL中将一行拆分为两行?
假设我有列
Name, Time, Model
我有一行,例如'Nick', 1:00, 2010
。模型可以是2010年或2012年。
我怎样才能做到这一点
'Nick', NULL, 2012
'Nick', 1:00, 2010
而不是只有一行。基本上,我需要对表中的所有行执行类似的操作,其中列出未在日期部分下列为NULL值的新行的模型。
谢谢!
答案 0 :(得分: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
答案 1 :(得分: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 |