如图 用sql行转列 图一原表,图二希望转换后,用sql server 进行语句转换。感谢
(不能用 case when 因为日期可能是一个大的范围,图中只是示例)
如图 用sql行转列 图一原表,图二希望转换后
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- ダ雨夹雪リ 2022-06-23 09:49关注
--建表 CREATE TABLE #tmp ( a INT , b VARCHAR(100), c INT, d DATETIME, e NUMERIC(18,2), f MONEY, g MONEY ) --插入测试数据 INSERT INTO #tmp values(1,'小小',111,'2020-01-01',10.2,99,88) INSERT INTO #tmp values(2,'大大',222,'2021-02-10',20.3,66,77) INSERT INTO #tmp values(3,'中中',333,'2022-03-02',30.5,55,76) INSERT INTO #tmp values(4,'齐齐',444,'2023-04-20',40.5,85,82) INSERT INTO #tmp values(5,'琪琪',555,'2024-05-03',50.9,23,10) INSERT INTO #tmp values(6,'七七',666,'2025-06-04',60.0,11,10) --动态拼接SQL,先列转行,再行转列 DECLARE @sql VARCHAR(max)='' DECLARE @where VARCHAR(max)='' SET @where=( SELECT ','+QUOTENAME( ROW_NUMBER() OVER(ORDER BY GETDATE())) FROM #tmp FOR XML PATH('') ) SET @sql='SELECT * FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY y) AS z,id,x,y FROM ( SELECT ROW_NUMBER() OVER(ORDER BY GETDATE()) AS id, CONVERT(VARCHAR(4000),a) AS a, CONVERT(VARCHAR(4000),b) AS b, CONVERT(VARCHAR(4000),c) AS c, CONVERT(VARCHAR(4000),CONVERT(VARCHAR(10),d,121)) AS d, CONVERT(VARCHAR(4000),e) AS e, CONVERT(VARCHAR(4000),f) AS f, CONVERT(VARCHAR(4000),g) AS g FROM #tmp ) a UNPIVOT ( x FOR y IN (a,b,c,d,e,f,g) ) b ) c PIVOT ( MAX(x) FOR id IN ('+STUFF(@where,1,1,'')+') ) d' EXEC (@sql) DROP TABLE #tmp
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 基于卷积神经网络的声纹识别
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 CSAPPattacklab
- ¥15 一直显示正在等待HID—ISP
- ¥15 Python turtle 画图
- ¥15 stm32开发clion时遇到的编译问题