将一行拆分为两行

时间:2013-05-28 09:48:48

标签: sql

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

假设我有列

Name, Time, Model

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

我怎样才能做到这一点

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

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

谢谢!

2 个答案:

答案 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 |