为每个具有多列数据的单元格创build一行

我正在处理一项调查中产生的数据,这个调查的第一列有一个唯一的回应者ID,然后有多个栏目与被调查者在寻找雇员方面所select的国家的select有关。 所以我的桌子看起来像这样:

RespondentID Andorra Austria Belgium Cyprus Denmark Finland France 2546078180 Andorra NULL NULL Cyprus NULL NULL NULL 2546077668 NULL NULL Belgium NULL NULL NULL NULL 2546077120 NULL NULL NULL NULL Denmark Finland NULL 

我想要结束的是一个表格,列出了每个答案的答复者ID。 所以上面的数据看起来像这样:

 RespondentID Country 2546078180 Andorra 2546078180 Cyprus 2546077668 Belgium 2546077120 Denmark 2546077120 Finland 

因为这可以让我创build一张详细说明受访者所关联国家的表格,然后我可以将这张表格join到其他回答中,这些回答大多是我们需要做的报告数据。

这些数据是通过Excel电子表格input的,所以如果需要或者更好的话,在导入到SQL之前做一些格式化也是可以接受的。

使用UNPIVOT来正常化您的表格:

 SELECT u.RespondentID, u.Country FROM @source UNPIVOT (Country FOR c IN (Andorra, Austria, Belgium, Cyprus, Denmark, Finland, France)) u 

@source是包含从Excel工作表导入的数据的表格。

testing数据:

 DECLARE @source TABLE ( RespondentID BIGINT NOT NULL, Andorra VARCHAR(25), Austria VARCHAR(25), Belgium VARCHAR(25), Cyprus VARCHAR(25), Denmark VARCHAR(25), Finland VARCHAR(25), France VARCHAR(25) ) INSERT INTO @source (RespondentID, Andorra, Austria, Belgium, Cyprus, Denmark, Finland, France) VALUES (2546078180, 'Andorra', NULL, NULL, 'Cyprus', NULL, NULL, NULL), (2546077668, NULL, NULL, 'Belgium', NULL, NULL, NULL, NULL), (2546077120, NULL, NULL, NULL, NULL, 'Denkmark', 'Finland', NULL) -- I assume that 'NULL' cell values from your Excel sheet become NULL during the import. 

输出:

 RespondentId Country -------------------- ------------------------- 2546078180 Andorra 2546078180 Cyprus 2546077668 Belgium 2546077120 Denkmark 2546077120 Finland 

UNION子句是要走的路:

  SELECT * FROM ( SELECT RespondentID, Field1 as Country FROM myTable UNION SELECT RespondentID, Field2 as Country FROM myTable UNION .... UNION SELECT RespondentID, Fieldn as Country FROM myTable) t WHERE Country IS NOT NULL