sql - 在 SQL Server 中将列中的数据转换为行
问题描述
对SQL相当陌生,所以我很抱歉!
目前我有以下 SQL 查询:
select [data]
from Database1.dbo.tbl_Data d
join Database1.tbl_outbound o on d.session_id = o.session_id
where o.campaign_id = 1047
and d.session_id = 12
这将返回一列,如下所示(并且它可以返回不同的行数,具体取决于campaign_id
和session_id
!):
[data]
[1] Entry 1
[2] Entry 2
[3] Entry 3
[4] Entry 4
[5] Entry 5
.....
[98] Entry 98
[99] Entry 99
我想转换数据,使它们显示在 1 行而不是 1 列中,例如:
[data1] [data2] [data3] [data4] [data5] .... [data98] [data99]
[1] Entry 1 Entry 2 Entry 3 Entry 4 Entry 5 .... Entry 98 Entry 99
我希望我已经解释得足够好!谢谢!:)
我已经看到一些关于 Pivot 和 Unpivot 的信息,但无法让它发挥作用!
解决方案
试试这个有助于您要求的动态 sql
IF OBJECT_ID('tempdb..#Temp')IS NOT NULL
DROP TABLE #Temp
CREATE TABLE #Temp (data VARCHAR(100))
GO
IF OBJECT_ID('tempdb..#FormatedTable')IS NOT NULL
DROP TABLE #FormatedTable
Go
INSERT INTO #Temp(data)
SELECT 'Entry1' UNION ALL
SELECT 'Entry2' UNION ALL
SELECT 'Entry3' UNION ALL
SELECT 'Entry4' UNION ALL
SELECT 'Entry5'
SELECT ROW_NUMBER()OVER(ORDER BY Data) AS SeqId,
Data,
'Data'+CAST(ROW_NUMBER()OVER(ORDER BY Data) AS VARCHAR(100)) AS ReqColumn
INTO #FormatedTable
FROM #Temp
DECLARE @Sql nvarchar(max),
@DynamicColumn nvarchar(max),
@MaxDynamicColumn nvarchar(max)
SELECT @DynamicColumn = STUFF((SELECT ', '+QUOTENAME(ReqColumn)
FROM #FormatedTable FOR XML PATH ('')),1,1,'')
SELECT @MaxDynamicColumn = STUFF((SELECT ', '+'MAX('+(ReqColumn)+') AS '+QUOTENAME(CAST(ReqColumn AS VARCHAR(100)))
FROM #FormatedTable FOR XML PATH ('')),1,1,'')
SET @Sql=' SELECT ROW_NUMBER()OVER(ORDER BY (SELECT 1)) AS SeqId, '+ @MaxDynamicColumn+'
FROM
(
SELECT * FROM #FormatedTable
) AS src
PIVOT
(
MAX(Data) FOR [ReqColumn] IN ('+@DynamicColumn+')
) AS Pvt
'
EXEC (@Sql)
PRINT @Sql
结果
SeqId Data1 Data2 Data3 Data4 Data5
----------------------------------------------
1 Entry1 Entry2 Entry3 Entry4 Entry5
推荐阅读
- python - 如何优化我的代码以使我的贪心算法更好?
- java - Spring Boot 2.1.5 无法将 java.lang.String 类型的属性值转换为所需的 java.time.LocalDate 类型
- r - 如何修复 mlogit 错误:“系统在计算上是奇异的:倒数条件数”
- mysql - 由于循环引用,如何在迁移到谷歌云 sql 时禁用外键检查
- assembly - X86: `movsxd rdx,edx` 指令是什么意思?
- database - 我可以以某种方式提供额外的上下文以允许 postgres 有效地排序/限制视图而不计算它们的行吗?
- java - 创建自定义参数匹配器混淆实现
- testflight - 上传到 TestFlight 时,Fastlane 获得“train_version 不再是 FastlaneCore 消息中使用的参数”
- javascript - 如何将道具从 connect 的 HOC 传递到 HOC?
- google-bigquery - 查询失败并出现错误 RESOURCE_EXHAUSTED (ORDER BY without ORDER BY)