如何在 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) 等值列表中添加更多年份,以获得这些年份的预期结果。
小提琴示例(示例数据类型可能与您的不同)
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 |