我正在使用SQL Server。我的数据库中有一个表,就像
id stops time1 time2 time3 time4
-----------------------------------------------
1 Exit1 6:00 AM 8:00 AM 10:00 AM 12:00 PM
2 Exit2 7:00 AM 9:00 AM 11:00 AM 1:00 PM
上面有更多行。
但是我想创建另一个表,它只使用那些id并将时间#放在单独的列中,对应各自的id,如下所示:
id times
------------
1 6:00 AM
1 8:00 AM
1 10:00 AM
1 12:00 PM
2 7:00 AM
2 9:00 AM
任何人都可以请我先行一步吗?甚至一个解决方案将受到高度赞赏。
答案 0 :(得分:3)
您可以运行四个单独的查询来获得所需的结果(SQL Fiddle):
INSERT INTO MyTable
(id, times)
SELECT id, time1
FROM MyOtherTable
INSERT INTO MyTable
(id, times)
SELECT id, time2
FROM MyOtherTable
INSERT INTO MyTable
(id, times)
SELECT id, time3
FROM MyOtherTable
INSERT INTO MyTable
(id, times)
SELECT id, time4
FROM MyOtherTable
或者,您可以执行以下操作,以防止插入重复项(SQL Fiddle):
INSERT INTO MyTable
(id, times)
SELECT id, time1
FROM MyOtherTable
UNION
SELECT id, time2
FROM MyOtherTable
UNION
SELECT id, time3
FROM MyOtherTable
UNION
SELECT id, time4
FROM MyOtherTable
答案 1 :(得分:1)
UNPIVOT
的定义。如果您使用的是SQLServer 2005或更高版本,则可以使用
INSERT INTO OtherTable
SELECT id, [time]
FROM (SELECT id, time1, time2, time3, time4 FROM Table1) t
UNPIVOT
([time] FOR times IN (time1, time2, time3, time4)) pvt
UNPIVOT
要求所有未公开的列具有相同的类型和维度