行数据转列数据

liyaohui13098452233 2018-01-09 01:30:13


上图如何把行的数据转换成列

上图是一个表的数据,column_name有三列分别是banner,OrderType和remark

怎样把结果转换成下图显示
...全文
510 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2018-01-09
  • 打赏
  • 举报
回复
引用 2 楼 liyaohui13098452233 的回复:
(6 行受影响) [banner],[OrderType],[remark] SELECT [banner],[OrderType],[remark] from #tab pivot(max(old_value)for columnName in([banner],[OrderType],[remark]))a 消息 102,级别 15,状态 1,第 1 行 '(' 附近有语法错误。
哪个版本的sql啊,可能你的版本太低,不支持povit函数。用下面的case用法

IF OBJECT_ID('tempdb..#tab') IS NOT NULL
    DROP TABLE #tab
GO
CREATE TABLE #tab(
    lsn VARCHAR(50),
    columnName VARCHAR(20),
    old_value varchar(20)   
)   
INSERT INTO #tab
SELECT '007B:00153:002','banner','1' UNION ALL
SELECT '007B:00153:002','OrderType',NULL UNION ALL
SELECT '007B:00153:002','remark','加急订单' UNION ALL
SELECT '007B:00153:005','banner','2' UNION ALL
SELECT '007B:00153:005','OrderType','1' UNION ALL
SELECT '007B:00153:005','remark','已完成订单'
--测试数据结束
 
SELECT 
       MAX(CASE columnName WHEN 'banner' THEN old_value ELSE NULL END) banner,
       MAX(CASE columnName WHEN 'OrderType' THEN old_value ELSE NULL END) OrderType,
       MAX(CASE columnName WHEN 'remark' THEN old_value ELSE NULL END) remark
FROM   #tab
GROUP BY lsn
  • 打赏
  • 举报
回复
(6 行受影响) [banner],[OrderType],[remark] SELECT [banner],[OrderType],[remark] from #tab pivot(max(old_value)for columnName in([banner],[OrderType],[remark]))a 消息 102,级别 15,状态 1,第 1 行 '(' 附近有语法错误。
听雨停了 2018-01-09
  • 打赏
  • 举报
回复

IF OBJECT_ID('tempdb..#tab') IS NOT NULL
DROP TABLE #tab
GO
CREATE TABLE #tab(
lsn VARCHAR(50),
columnName VARCHAR(20),
old_value varchar(20)
)
INSERT INTO #tab
SELECT '007B:00153:002','banner','1' UNION ALL
SELECT '007B:00153:002','OrderType',NULL UNION ALL
SELECT '007B:00153:002','remark','加急订单' UNION ALL
SELECT '007B:00153:005','banner','2' UNION ALL
SELECT '007B:00153:005','OrderType','1' UNION ALL
SELECT '007B:00153:005','remark','已完成订单'
--测试数据结束

DECLARE @name VARCHAR(max),@sql VARCHAR(max)
set @name =stuff((SELECT DISTINCT ',['+columnName+']' from #tab for xml PATH('')),1,1,'')
PRINT @name
set @sql ='SELECT [banner],[OrderType],[remark] from #tab pivot(max(old_value)for columnName in('+@name+'))a'
PRINT @sql
EXEC( @sql)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧