zoukankan      html  css  js  c++  java
  • 数据库行列转换sql

    经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换。

    1.创建一张表

    CREATE TABLE [android_source](
        [CREATETIME] [datetime] NULL,
        [SOURCE] [nvarchar](255) NULL,
        [COUNT] [float] NULL
    )

    2.插入测试数据

    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','1xingdong',3);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','eoemarket',1);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','lenovomm',2);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','mqidian',2);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','mumayi',5);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','nduoa',1);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','paojiao',4);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','qidian',5);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','1xingdong',20);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','eoemarket',7);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','lenovomm',21);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','mqidian',43);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','mumayi',17);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','nduoa',14);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','paojiao',8);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-14 00:00:00.000','qidian',72);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-15 00:00:00.000','1xingdong',30);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-15 00:00:00.000','eoemarket',22);
    insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-15 00:00:00.000','lenovomm',32);

    3.列转行

    SELECT 
          CONVERT(varchar(10), [CREATETIME],120) as CreateTime, 
          MAX(CASE [SOURCE] WHEN 'qidian' THEN [COUNT] ELSE 0 END) AS 'qidian',
          MAX(CASE [SOURCE] WHEN 'paojiao' THEN [COUNT] ELSE 0 END) AS 'paojiao',
          MAX(CASE [SOURCE] WHEN 'nduoa' THEN [COUNT] ELSE 0 END) AS 'nduoa',
          MAX(CASE [SOURCE] WHEN 'mumayi' THEN [COUNT] ELSE 0 END) AS 'mumayi',
          MAX(CASE [SOURCE] WHEN 'mqidian' THEN [COUNT] ELSE 0 END) AS 'mqidian',
          MAX(CASE [SOURCE] WHEN 'lenovomm' THEN [COUNT] ELSE 0 END) AS 'lenovomm',
          MAX(CASE [SOURCE] WHEN 'eoemarket' THEN [COUNT] ELSE 0 END) AS 'eoemarket',
          MAX(CASE [SOURCE] WHEN 'dbank' THEN [COUNT] ELSE 0 END) AS 'dbank',
          MAX(CASE [SOURCE] WHEN '1xingdong' THEN [COUNT] ELSE 0 END) AS '1xingdong'
    FROM [MyDataBase].[dbo].android_source
    GROUP BY CONVERT(varchar(10), [CREATETIME],120)

    结果:

  • 相关阅读:
    win8/10 bcdboot引导修复命令的原理和使用方法
    DD命令做备份和恢复
    基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理
    工资计算方式
    什么样的辞职理由能让面试官满意
    使用sql删除数据库中的重复数据,只保留分组后的第一条数据
    mysql实现row_number()和row_number() over(partition by)
    c# dev Gridcontrol绑定多层list
    窗体高度获取,随机调整窗体展示的位置
    consul下载地址
  • 原文地址:https://www.cnblogs.com/fanyong/p/3346932.html
Copyright © 2011-2022 走看看