如何将一些列转换为其他列重复的行?

时间:2013-12-20 18:01:24

标签: sql-server excel

我有一些看起来像这样的数据:

Count   Id          Test1    Test2       Test3
2417    118006353   0050167  0050380     0050390    
1445    118016614   0070015  0070105                        
1426    118013670   0050167  0050380     0050390                    
978     118005505   0050995  0098392     0099359                    
757     118002779   0050167  
735     118001930   0050380  0050390     0050771                    
694     118005514   0050380  0050390                        
683     117972784   0050557
636     118017677   0056009  0097709                        
601     118008066   0070015  

我需要将其转换为如下所示:

Count   Id          Test
2417    118006353   0050167
2417    118006353   0050380
2417    118006353   0050390
1445    118016614   0070015
1445    118016614   0070105
1426    118013670   0050167
1426    118013670   0050380
1426    118013670   0050390
978     118005505   0050995
978     118005505   0098392
978     118005505   0099359
757     118002779   0050167
735     118001930   0050380
735     118001930   0050390
735     118001930   0050771
694     118005514   0050380
694     118005514   0050390
683     117972784   0050557
636     118017677   0056009
636     118017677   0097709
601     118008066   0070015

这是我在excel中可以做的事情吗? (或任何其他工具?)

5 个答案:

答案 0 :(得分:1)

如果你真的只有三列(或其他一些合理的数字),我会制作三组不同的数据:Count, ID, Test1Count, ID, Test2Count, ID, Test3(制作这些数据) ,只需复制并粘贴原始数据,然后删除其中两列)。现在将这三组中的每一组复制并粘贴到彼此之下。然后在D列中使用此公式:

=if(C1="",0,1)

然后只过滤并删除D列中的值为0的所有行。按您的意愿排序。

答案 1 :(得分:1)

您可以尝试SQL查询,如下所示:

SELECT count,ID,Test1 as 'TEST' FROM myTABLE UNION
SELECT count,ID,Test2 FROM myTABLE UNION
SELECT count,ID,Test3 FROM myTABLE
ORDER BY count,ID,TEST

答案 2 :(得分:1)

也许这个?工会应该在SQL Server中获得结果......

SELECT [COUNT], ID, TEST1
FROM TABLE
UNION 
SELECT [COUNT], ID, TEST2
FROM TABLE
WHERE TEST2 IS NOT NULL
UNION
SELECT [COUNT], ID, TEST3
FROM TABLE
WHERE TEST3 IS NOT NULL

答案 3 :(得分:1)

您可以使用SQL Server中的UNPIVOT函数来获取结果:

select [count], id, test
from yourtable
unpivot
(
  test
  for col in (test1, test2, test3)
) un;

请参阅SQL Fiddle with Demo

答案 4 :(得分:1)

SELECT *
FROM myTable
UNPIVOT (Test FOR TestX IN (Test1,Test2,Test3)) p