sql-server - 如何在 Group By 查询中显示子元素的数量 - Pivoted
问题描述
我们有汽车桌。它有品牌:
- 日产
- 丰田
- 宝马
我们有城市:
- 纽约
- 洛杉矶
- 达拉斯
桌子:
- ID
- 品牌
- 城市编号
它拥有 3 个城市的全部 250 000 辆汽车。
我们如何显示它们按城市和计数分组,但城市是列。
这是我的查询:
SELECT Count(veh.id) [Count],pd.District, vet.Name FROM Vehicles veh
INNER JOIN PostalDistricts pd on pd.Id = veh.PostalDistrictId
INNER JOIN VehicleMarqueId vet on vet.id = veh.VehicleMarqueId
GROUP BY pd.District, vet.Name
ORDER BY Count(veh.id) DESC, pd.District asc
但结果是:
+-------+-------------+--------+
| Count | City | Marque |
+-------+-------------+--------+
| 9547 | New York | Toyota |
| 3509 | Dallas | Toyota |
| 2608 | Los Angeles | Toyota |
| 2545 | New York | Nissan |
| 2107 | Dallas | Nissan |
| 1780 | Los Angeles | Nissan |
+-------+-------------+--------+
预期是:
+-------------+--------+--------+
| City | Toyota | Nissan |
+-------------+--------+--------+
| Dallas | 3509 | 2107 |
| Los Angeles | 2608 | 1780 |
| New York | 9547 | 2545 |
+-------------+--------+--------+
解决方案
您可以使用以下pivot
语句:
declare @tmp table ([count] int , City varchar(50), Marque nvarchar(50))
insert into @tmp values
(9547, 'New York', 'Toyota')
,(3509, 'Dallas', 'Toyota')
,(2608, 'Los Angeles', 'Toyota')
,(2545, 'New York', 'Nissan')
,(2107, 'Dallas', 'Nissan')
,(1780, 'Los Angeles', 'Nissan')
select * from @tmp
pivot
(
max([count])
for Marque in ([Toyota], [Nissan] )
) piv
结果:
但是,如果Marque
列中有更多值,则必须使用动态 TSQL 生成所需的所有列
推荐阅读
- javascript - Echarts 多折线图
- node.js - Nginx 作为同一域上两个 nodejs 应用程序的反向代理
- javascript - 如何使用箭头函数将函数传递给组件?
- flutter - DioError 显示数据时出现 Http 状态错误 [401]
- javascript - 出现致命错误:v8::ArrayBuffer::NewBackingStore 分配失败 - 在进行反应构建时处理内存不足
- python - 如何重定向用户两次 - Django?
- react-google-maps - 反应谷歌地图。MarkerClusterer 自定义行为
- vue.js - 多少。使用构建工具rollupjs打包Vue项目时会产生不同后缀的js文件?
- python - Databricks 连接 java.lang.ClassNotFoundException
- github - 在 google colab 上打开一个 github 存储库