weixin_42853935 2022-06-21 16:17 采纳率: 85.7%
浏览 95
已结题

如图 用sql行转列 图一原表,图二希望转换后

img

如图 用sql行转列 图一原表,图二希望转换后,用sql server 进行语句转换。感谢
(不能用 case when 因为日期可能是一个大的范围,图中只是示例)

  • 写回答

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
     
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月1日
  • 已采纳回答 6月23日
  • 修改了问题 6月22日
  • 赞助了问题酬金10元 6月22日
  • 展开全部

悬赏问题

  • ¥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时遇到的编译问题