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

  • 相关阅读:
    SQL中利用脚本恢复数据库
    SQL中如何检查死锁
    三个有用的SQL辅助工具
    企业报销系统完整设计方案(三)
    企业报销系统完整设计方案(二)
    企业报销系统完整设计方案
    Crystal Report在.net中的两种显示方式
    cacti 流量图合并
    Centos 7 配置邮件发送
    Centos 7 Ntop 流量分析 安装
  • 原文地址:https://www.cnblogs.com/davidgu/p/3200954.html
Copyright © 2011-2022 走看看