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

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

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中做什么? (或者其他工具?)

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

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

然后,只需筛选并删除列D中值为0的所有行即可。

你可以尝试一个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 

也许这个? 联盟应该让你在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 

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

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

看演示与SQL小提琴

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