sql - 表的动态列
问题描述
我有一张桌子销售:
SalesID. Date. Geography
1. 2020-01. Italy
1. 2020-01. France
1. 2020-01. UK
2. 2020-02. Italy
2. 2002-02. Canada
3. 2002-08. France
我想要这样的结果:
SalesID. Date. Geography1 Geography2. Geography3
1. 2020-01. Italy. France. Uk
2. 2020-02. Italy. Canada. Null
3. 2020-08. France
我知道如何对列进行透视,但销售 ID 的地理数量是无限的。这个怎么做?
解决方案
CREATE TABLE MyTable( SalesID INT, [Date] varchar(20), Geography VARCHAR(50) ); INSERT INTO MyTable(SalesID,[Date],Geography)VALUES (1,'2020-01','Italy'),(1,'2020-01','France'), (1,'2020-01','UK'),(2,'2020-02','Italy'),(2,'2020-02','Canada'), (3,'2020-08','France'); DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(a.Geography) FROM MyTable a FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT date, ' + @cols + ' from ( select SalesID ,Date , Geography from MyTable ) x pivot ( max(Geography) for Geography in (' + @cols + ') ) p ' execute(@query)
日期 | 加拿大 | 法国 | 意大利 | 英国 :-------- | :----- | :----- | :---- | :--- 2020-01 | 空 | 法国 | 意大利 | 英国 2020-02 | 加拿大 | 空 | 意大利 | 空 2020-08 | 空 | 法国 | 空 | 无效的
db<>在这里摆弄
推荐阅读
- android - 从 Jetpack Compose 中的另一个可组合函数访问 TextField 值
- javascript - 如何从动态填充的下拉列表中动态选择一个选项
- oauth-2.0 - (现在)是否可以通过 API 撤销 Gitlab 访问令牌?
- python - 循环遍历多个集合列表
- c++ - 添加 mobx-react-lite 后按钮不起作用代码没有显示任何错误但它不起作用它显示列表但里面的按钮不起作用
- java - 用户在JAVA程序上创建后如何给每个学生一个唯一的ID
- qt - “没有可用于类型 'video/x-h264 的解码器
- c# - 在 C# 中将 IIS API 服务凭据传递给 ftp 服务器
- android - 我尝试使用示例 android libphone sdk 但无法将耳机设置为输入或输出设备?
- c++ - 编写 C++ 代码来计算字符串中 a 的数量