【发布时间】:2019-04-11 14:01:38
【问题描述】:
我正在针对 varchar 运行 SQL Pivot。
我有下表:
`大陆 |状态 |城市 --------------------------------------------- 北美 |加利福尼亚 |奥克兰 北美 |加利福尼亚 |洛杉矶 北美 |加利福尼亚 |萨克拉门托 北美 |加利福尼亚 |圣地亚哥 北美 |加利福尼亚 |旧金山 北美 |加利福尼亚 |厄普顿 北美 |佛罗里达 |杰克逊维尔 北美 |佛罗里达 |劳德代尔堡 北美 |佛罗里达 |迈阿密 北美 |佛罗里达 |坦帕 北美 |纽约 |奥尔巴尼 北美 |纽约 |水牛 北美 |纽约 |纽约 北美 |纽约 |罗切斯特 北美 |纽约 |尤蒂卡 北美 |德州 |奥斯汀 北美 |德州 |达拉斯 北美 |德州 |圣安东尼奥`我想创建一个如下所示的数据透视表:
`大陆 |加利福尼亚 |佛罗里达 |纽约 |德克萨斯州 -------------------------------------------------- --------------------- 北美 |奥克兰 |杰克逊维尔 |奥尔巴尼 |奥斯汀 北美 |洛杉矶 |劳德代尔堡 |布法罗 |达拉斯 北美 |萨克拉门托 |迈阿密 |纽约 |圣安东尼奥 北美 |圣地亚哥 |坦帕 |罗切斯特 |空值 北美 |旧金山 |空 |尤蒂卡 |空值 北美 |厄普顿 |空 |空 |空`我目前正在使用以下代码:
` 选择 * 从 ( 选择地名.大陆, 地名.州, 地名.城市, row_number() over(按 Placename.State 分区按 Placename.City 排序) rn FROM 地名 ) AS SourceTable PIVOT(Min(City) FOR [State] IN([California], [佛罗里达], [纽约], [德克萨斯] )) 作为数据透视表`注意:Min(City) 和 Max(City) 给了我相同的输出
现在,使用这段代码后,给出下表:
`大陆 |加利福尼亚 |佛罗里达 |纽约 |德克萨斯州 -------------------------------------------------- --------------------- 北美 |奥克兰 |杰克逊维尔 |空 |奥斯汀 北美 |空 |劳德代尔堡 |奥尔巴尼 |达拉斯 北美 |洛杉矶 |空 |布法罗 |空值 北美 |萨克拉门托 |迈阿密 |纽约 |圣安东尼奥 北美 |空 |坦帕 |空 |空值 北美 |圣地亚哥 |空 |罗切斯特 |空值 北美 |旧金山 |空 |尤蒂卡 |空值 北美 |厄普顿 |空 |空 |空`正在输出的表与期望的表输出不一样的原因是什么?
【问题讨论】:
-
删除 row_number 现在只选择每个州的第一个城市,而不是每个州的所有城市
-
您想要每个州的全部或第一个城市?
-
每个州的所有
-
如果您显示查询的完整结果,尤其是 rn 列,可能会更有帮助。您的查询似乎是正确的,但我们可能会通过查看结果了解更多信息。当然,如果您提供使用数据集填充表所需的脚本,那将更有帮助。请看这篇文章开始:stackoverflow.com/help/how-to-ask
-
我刚刚使用您的确切数据运行了您的确切查询,它给了我您想要的输出 - 而不是您假设的实际输出。所以肯定有比张贴更多的内容。
标签: sql sql-server tsql database-design pivot