zoukankan      html  css  js  c++  java
  • SQL行转列

    SQL行转列是比较经典的问题:

    比如有如下数据表,有如下某一款号(表1): 

      颜色  尺码  库存  

      红色    S    10 

      红色    M    80 

      白色    L    50 

      白色    S    60

    要将上面的表转化为如下格式(表2): 

    颜色    S  M  L 

    红色  10  80  0  

    白色  60  0  50

    动态sql:

    create  table #tbl_0

    (

       color nvarchar(12),

       nsize nchar(1),

       store int

    )

    insert into #tbl_0

    select 'red',    'S',    '10' union all 

    select  'red',    'M',    '80'  union all

    select 'white',    'L',    '50'  union all

    select  'white',    'S',    '60'

    select * from #tbl_0

    --结果

    --red    S    10

    --red    M    80

    --white    L    50

    --white    S    60

    declare @sql varchar(4000)

    set @sql = ' select color,'

    select @sql= @sql+'isnull(sum(case nsize when '''+ns+''' then isnull(store,0) end),0) '''+ns+''','

        from (select 'S' as ns union all select 'M' union all select 'L') a

    set @sql = stuff(@sql,len(@sql),1,'')

    set @sql=@sql+ ' from #tbl_0 group by color'

    exec(@sql)

    --结果

    --red    10    80    0

    --white    60    0    50

    drop table #tbl_0

    静态sql:

    select color,

    isnull(sum(case nsize when 'S' then isnull(store,0) end),0) 'S',

    isnull(sum(case nsize when 'M' then isnull(store,0) end),0) 'M',

    isnull(sum(case nsize when 'L' then isnull(store,0) end),0) 'L'

    from #tbl_0 group by color

  • 相关阅读:
    从零教你在Linux环境下(ubuntu)如何编译hadoop2.4
    springboot集成redis
    缓存穿透
    关于HashMap,HashTable,HashSet浅析
    关于多线程的几点总结
    java设计模式--工厂模式
    java设计模式--单例模式
    初识Linux(五)--VI/VIM编辑器
    初识Linux(四)--系统常用命令
    初识Linux(三)--文件系统基本结构
  • 原文地址:https://www.cnblogs.com/davidgu/p/3200954.html
Copyright © 2011-2022 走看看