2017-04-21 43 views
1

搜索线程我只能找到组合或合并,但不插入并保留原始值。 因此,这里是我:SQL - 在不合并数据的情况下将一列插入另一列

ID time1 time2 time3 
1 20 NULL 30 
2 50 NULL NULL 
2 20 30 40 

我需要的是:

ID time 
1 20 
1 30 
2 50 
2 20 
2 30 
2 40 

而忽略空值。 谢谢!

+0

是在列数源表固定? –

+0

只是一个提示,如果你想以后玩这个,如果可以的话,添加一个列到第二个表,“timesource”,填充源列 – JohnHC

+0

可能的重复:http://stackoverflow.com/questions/ 49925 /工会与工会之间的区别是什么 – lalithkumar

回答

1

与逆转置它处理由默认NULL值比较,不包括那些从结果集试试这个。

参考目的,在螺纹给出

CREATE TABLE #TempTable(
ID int, 
time1 int, time2 int, time3 int) 

INSERT INTO #TempTable (ID, time1, time2,time3) 
    VALUES (1, 20, NULL, 30), 
    (2, 50, NULL, NULL), 
    (2, 20, 30, 40) 

解决方案中的样本数据沿着一个临时表在这里与上述的临时表数据

SELECT ID, [time] 
    FROM #TempTable 
    UNPIVOT 
(
    [time] 
for [timecolumnName] in (time1, time2,time3) 
) unpiv; 
+0

谢谢!这个工作很好,除了我还需要删除重复,任何想法如何做到这一点?或者我应该只是用不同的命令 – Johnny

+0

删除他们,我也想保持对价值从(时间1,时间2,时间3) – Johnny

+0

SELECT ID,[时间]来到那里的轨道,[timecolumnName] FROM #TempTable UNPIVOT ( [timecolumnName] in(time1,time2,time3) )unpiv; [time] 这将使您能够跟踪列名 –

4
select id, time1 as time from your_table where time1 is not null 
union all 
select id, time2 from your_table where time2 is not null 
union all 
select id, time3 from your_table where time3 is not null 
+0

由于某种原因,它只给了我time1的值,我目前正试图了解什么是错的,因为这可能是我的错 – Johnny

+0

我不认为这很重要但我有两个ID。所以每个ID可以有多行取决于第二个ID。现在我只拿到time1专栏我不知道为什么.. – Johnny

+0

你可以改变你的问题以适应真正的问题... –

0

你只有三列吗?如果是这样,

INSERT [NewTable] 
(Id, time) 
SELECT Id, time1 
FROM [OldTable] 
WHERE time1 IS NOT NULL; 

INSERT [NewTable] 
(Id, time) 
SELECT Id, time2 
FROM [OldTable] 
WHERE time2 IS NOT NULL; 

INSERT [NewTable] 
(Id, time) 
SELECT Id, time3 
FROM [OldTable] 
WHERE time3 IS NOT NULL; 

如果你可以有三个以上的让我们知道 - 你仍然可以做到这一点与动态SQL

相关问题