0

如何在 SQL 中将一行拆分为两行?

假设我有列

Name, Time, Model

我有一排,例如'Nick', 1:00, 2010。模型也可以是 2010 或 2012。

我怎样才能使它拥有

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

而不是只有一排。基本上,我需要对表中的所有行执行类似的操作,我们在其中列出未列为新行且在日期部分下具有 NULL 值的模型。

谢谢!

4

2 回答 2

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
于 2013-05-28T09:55:01.207 回答
0

这也有效。如果需要,您可以在 (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 |
于 2013-05-28T10:15:02.220 回答