我可以在 SQL 服务器中没有分组依据的情况下旋转动态 table
Can I pivot dynamic table with no group by in SQL Server
这是我在 table 中的数据(来自字段 table 和值 table 的左连接)
这是我使用枢轴函数后的预期结果table
感谢帮助^___^
我不确定为什么 group by 会进入你的脑海,但这里有一个你正在努力实现的工作示例。
select * into #temp from
( values
(1,'A','AV'),
(1,'B','BV'),
(1,'C','CV'),
(2,'A','AV'),
(2,'B','BV'),
(2,'C','CV'))
as t(row, FieldName, FieldValue)
select *
from #temp
PIVOT
(MAX(FieldValue) FOR FieldName in ([A],[B],[C])) as pvt
这对你有用吗?
我建议您使用动态 SQL,因为 fieldnames
将来可能会出现这样的数字:
DECLARE @columns nvarchar(max),
@sql nvarchar(max)
SELECT @columns = COALESCE(@columns,'') + ',' + QUOTENAME(c.fieldname)
FROM [Columns] c
ORDER BY c.cid
SELECT @sql = N'
SELECT *
FROM (
SELECT v.[row],
c.fieldname,
v.fieldvalue
FROM [Values] v
INNER JOIN [Columns] c
ON v.cid = c.cid
) t
PIVOT (
MAX(fieldvalue) FOR fieldname IN ('+STUFF(@columns,1,1,'')+')
) pvt'
EXEC sp_executesql @sql
将输出:
row FirstName LastName Email Phone
1 Arnun Saelim Arnun.s@outlook.com 0922743838
2 Micheal Saelim Micheal@gmail.com 0886195353
这是我在 table 中的数据(来自字段 table 和值 table 的左连接)
这是我使用枢轴函数后的预期结果table
感谢帮助^___^
我不确定为什么 group by 会进入你的脑海,但这里有一个你正在努力实现的工作示例。
select * into #temp from
( values
(1,'A','AV'),
(1,'B','BV'),
(1,'C','CV'),
(2,'A','AV'),
(2,'B','BV'),
(2,'C','CV'))
as t(row, FieldName, FieldValue)
select *
from #temp
PIVOT
(MAX(FieldValue) FOR FieldName in ([A],[B],[C])) as pvt
这对你有用吗?
我建议您使用动态 SQL,因为 fieldnames
将来可能会出现这样的数字:
DECLARE @columns nvarchar(max),
@sql nvarchar(max)
SELECT @columns = COALESCE(@columns,'') + ',' + QUOTENAME(c.fieldname)
FROM [Columns] c
ORDER BY c.cid
SELECT @sql = N'
SELECT *
FROM (
SELECT v.[row],
c.fieldname,
v.fieldvalue
FROM [Values] v
INNER JOIN [Columns] c
ON v.cid = c.cid
) t
PIVOT (
MAX(fieldvalue) FOR fieldname IN ('+STUFF(@columns,1,1,'')+')
) pvt'
EXEC sp_executesql @sql
将输出:
row FirstName LastName Email Phone
1 Arnun Saelim Arnun.s@outlook.com 0922743838
2 Micheal Saelim Micheal@gmail.com 0886195353