我正在处理从调查中生成的数据,该调查具有唯一的响应者ID作为第一列,然后有多个列与受访者在寻找员工方面所关注的国家/地区的选择相关。所以我的表看起来像:
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
因为这应该允许我创建一个表格,详细说明受访者所关联的国家/地区,然后我可以将此表格加入到其他响应中,这些响应主要是是/否或单个答案,我们需要对数据进行报告
这些数据是通过Excel电子表格传入的,因此如果需要或更好的话,在导入SQL之前进行一些格式化也是可以接受的。
答案 0 :(得分:1)
使用UNPIVOT
来规范化您的表格:
SELECT u.RespondentID, u.Country
FROM @source
UNPIVOT (Country FOR c IN (Andorra, Austria, Belgium, Cyprus, Denmark, Finland, France)) u
@source
是一个包含从Excel工作表导入的数据的表。
测试数据:
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
答案 1 :(得分:0)
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