SQL中行转化为列问题

原表数据展示如图:

hang.jpg

现需要变成如图

做了测试结果,语句如下:

declare @ck varchar(8000)  declare @sql varchar(8000)  select  @ck=isnull(@ck+',','')+ node_name from V_XLFX group by node_name order by node_name

 set @sql='select * from V_XLFX pivot(avg(usetime) for node_name in ('+@ck+')) dd'  --select @sql   这个能执行,结果如图

jg.jpg

 exec(@sql)  这个执行报错,如图

error.jpg

 

V_XLFX是视图,视图运行正常

请问是哪有问题呢?

 

 

chyou 发布于 2021-3-31 16:19 (编辑于 2021-3-31 16:21)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
3
用户E47mE1639Lv5见习互助
发布于2021-3-31 16:44

列名中不能有点. 改成以下试试

select  @ck=isnull(@ck+',','')+ '['+ node_name + ']' from V_XLFX group by node_name order by node_name

set @sql='select * from V_XLFX pivot(avg(usetime) for node_name in ('+@ck+')) dd' 

最佳回答
1
Z4u3z1Lv6专家互助
发布于2021-3-31 16:34(编辑于 2021-3-31 16:38)

加“[]”括起来:[01.发起申请]

  • chyou chyou(提问者) 有考虑过这个问题,但我查保留呢,是不是需要字符转换函数
    2021-03-31 16:36 
  • Z4u3z1 Z4u3z1 回复 chyou(提问者) SQL SERVER语法:01.发起申请 在不考虑忽略数据库名的情况下 是指01表(也可能是其他表被命名为01)的发起申请 字段
    2021-03-31 16:42 
  • chyou chyou(提问者) 谢谢
    2021-03-31 16:53 
最佳回答
0
闻亿多Lv5见习互助
发布于2021-3-31 16:23

行转列最简单的就是用UNION ALL

如SELECT 流程名称,SUM(01发起申请) 发起申请

GROUP BY 流程名称

UNION ALL 

SELECT 流程名称,SUM(02部门审核) 发起申请

GROUP BY 流程名称

  • chyou chyou(提问者) 节点名称不是固定的,不同类型流程节点审批会不一样,这种没办法用固定模式
    2021-03-31 16:25 
最佳回答
0
东水溪流Lv5见习互助
发布于2021-3-31 16:24(编辑于 2021-3-31 16:24)

你可以试着吧参数换成正常值式一下,如果数据库可以正常查出来,报表上参数配置没问题的话一般是不会有问题的

最佳回答
0
Kevin-sLv7中级互助
发布于2021-3-31 16:51

https://bbs.fanruan.com/thread-134616-1-1.html可以参考这个进行行列转换

  • 4关注人数
  • 520浏览人数
  • 最后回答于:2021-3-31 16:51
    请选择关闭问题的原因
    确定 取消
    返回顶部