Sql 将一行拆分为两行
如何在SQL中将一行拆分为两行 假设我有专栏Sql 将一行拆分为两行,sql,Sql,如何在SQL中将一行拆分为两行 假设我有专栏 Name, Time, Model 我有一行,比如2010年1:00“尼克”。此外,模型可以是2010年或2012年 我怎样才能使它成为我能拥有的呢 'Nick', NULL, 2012 'Nick', 1:00, 2010 而不仅仅是一排。基本上,我需要对表中的所有行执行类似的操作,在表中,我们列出了没有作为新行列出的模型,并在date部分下使用空值 谢谢 这也在起作用。如果需要,您可以在价值列表中添加更多年份,如(2011年),(2013年)
Name, Time, Model
我有一行,比如2010年1:00“尼克”。此外,模型可以是2010年或2012年
我怎样才能使它成为我能拥有的呢
'Nick', NULL, 2012
'Nick', 1:00, 2010
而不仅仅是一排。基本上,我需要对表中的所有行执行类似的操作,在表中,我们列出了没有作为新行列出的模型,并在date部分下使用空值
谢谢 这也在起作用。如果需要,您可以在价值列表中添加更多年份,如(2011年),(2013年),以获得这些年份的预期结果
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
(示例数据类型可能与您的不同)
请提供样品数据。我不清楚,你的问题。你的模型是逗号分隔的年份?也许可以将表的
联合到自身中?这很好,但我可以看到这是一个性能上的打击,因为它使用了交叉连接(实际上我正在尝试对更大的数据集做一些事情)。我想我会亲自尝试一下,看看会发生什么。
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 |