• 第四种行转列


     --动态处理

    select A.StuName,A.BZKTypeName,cast(A.BKCODE as varbinary(MAX)) even,
          row_number() over (partition by StuName,BZKTypeName order by getdate()) ID
        into #t1
        from BKLIST A
        --where StuName='林健辉'
     
      declare @sql1 varchar(max)
      declare @sql2 varchar(max)

      declare @id int
      declare @maxid int
      select @maxid=max(id)
        from #t1
      

      set @id=1
      set @sql1=''
      set @sql2=''
      while @id<@maxid
        begin

          set @sql1=@sql1+'['+CAST(@id as varchar(10))+'],'
          set @sql2=@sql2+' case when '+'['+CAST(@id as varchar(10))+']'
            +' IS null then  '''' else CAST('+'['+CAST(@id as varchar(10))+']'
            +' as varchar(100))+'','' end +'
          set @id=@id+1
        end
      set @sql1=@sql1+'['+CAST(@id as varchar(10))+']'

      set @sql2=@sql2+' case when '+'['+CAST(@id as varchar(10))+']'
        +' IS null then  '''' else CAST('+'['+CAST(@id as varchar(10))+']'
        +' as varchar(100)) end '
     
    --print @sql1
    --print @sql2
     
     
     

      declare @sql varchar(max)
      set @sql='
    select StuName,BZKTypeName,LEFT(BKCODE,LEN(BKCODE)-1)   from ( 
    SELECT StuName,BZKTypeName,
       '+@sql2+'
       BKCODE
      FROM ( select *    from #t1
       ) s2  PIVOT ( max(even) FOR ID IN ('+@sql1+')) as pvt
     
     )s3

    '
      print @sql
      exec( @sql)

    -------------------------------------------------------------------

    --执行的语句

    select StuName,BZKTypeName,LEFT(BKCODE,LEN(BKCODE)-1)   from ( 
    SELECT StuName,BZKTypeName,
        case when [1] IS null then  '' else CAST([1] as varchar(100))+',' end
        + case when [2] IS null then  '' else CAST([2] as varchar(100))+',' end
        + case when [3] IS null then  '' else CAST([3] as varchar(100))+',' end
        + case when [4] IS null then  '' else CAST([4] as varchar(100))+',' end
        + case when [5] IS null then  '' else CAST([5] as varchar(100)) end
       BKCODE
      FROM ( select *    from #t1
       ) s2  PIVOT ( max(even) FOR ID IN ([1],[2],[3],[4],[5])) as pvt
     
     )s3

    ----------------------------------------------------------------------------------------------------------


     --与XML方式的一次对比

    --xml方式脚本

    select B.StuName,B.BZKTypeName,left(NT,len(NT)-1) as evenNew
        from (
              select StuName,BZKTypeName,(
                                          select BKCODE+','
                                            from BKList
                                            where StuName=A.StuName
                                              and BZKTypeName=A.BZKTypeName
                                            order by StuName,BZKTypeName
                                         for
                                          xml path('')
                                         ) as NT
                from BKList A
                group by StuName,BZKTypeName
             ) B
      

  • 相关阅读:
    流程图如何画
    flex布局
    css函数
    常用的Array相关的属性和方法
    判断一个字符串中出现次数最多的字符,统计这个次数
    css溢出滚动条及去除滚动条的方法
    vue生命周期
    css中添加屏幕自适应方法(rem)
    vue-cli中配置屏幕自适应(px2rem)
    关于解决项目运行时出现的缓存问题
  • 原文地址:https://www.cnblogs.com/qanholas/p/2528386.html
Copyright © 2020-2023  润新知