假设我们有一个表,其中有一个邮政编码字段,其余为二进制字段(1或NULL),其名称对应于不同的地方。例如,想象该表有201个字段,第一个标题为“ zip code”的字段包含邮政编码,后一个字段为200个二进制值字段,标题为城市名称:芝加哥,纽约,休斯敦等。
假设第一行包含邮政编码11373。虽然可以使用合并查找第一个非空值并返回“ New York”,但也可以使用“ Elmhurst”之类的另一个值。
zip_code new_york chicago elmhurst dover maspeth
10001 1 NULL NULL NULL NULL
07801 NULL NULL NULL 1 NULL
11373 1 NULL 1 NULL 1
目标是将列名映射到每个邮政编码,并获得如下输出:
zip_code city
10001 new_york
07801 dover
11373 new_york
11373 elmhurst
11373 maspeth
非常感谢您的帮助。
答案 0 :(得分:0)
这是SQL UNPIVOT的绝佳用例:
SELECT unpvt.*
FROM
#x UNPIVOT (v FOR statename IN (new_york, chicago,elmhurst, dover, maspeth)) AS unpvt
答案 1 :(得分:0)
一种方法使用union all
:
select zip_code, 'New York' as city from t where new_york = 1
union all
select zip_code, 'Chicago' as city from t where chicago = 1
union all
. . .