T-SQL - 习题02_将数据表year|month|amount查询成year|m1|m2|m3|m4的样式

本文介绍了如何使用T-SQL解决面试中遇到的行转列问题,涉及数据库统计表的转换,从year|month|amount转换为year|m1|m2|m3|m4格式。文中给出了具体的SQL查询代码,并提供了参考资料。
摘要由CSDN通过智能技术生成
  • 时间:2017-09-11 整理:byzqy

题目:有个年度统计表,结构如下:

怎么样把这个表,查询成这样一个结果:

这是在面试过程中遇到的一个关于数据库的题,没有一点思路,不知它考查到的知识点是什么,如何下手?

网上搜了一下,有哥们儿说这是典型的“行转列问题”,好像用到“交叉表查询”,下面看看具体的代码!

文件:SQLQuery1.sql

/*
环境:Microsoft SQL Server 2012
工具: Microsoft SQL Server Management Studio
数据库: Interview
数据表: statistic
详情:
year        month        amount
1991        1            1.1
1991        2            1.2
1991        3            1.3
1991        4            1.4
1992        1            2.1
1992        2            2.2
1992        3            2.3
1992        4            2.4
(char(10))    (int)        (float)
查询成如下结果:
year    m1     m2     m3     m4
1991    1.1    1.2    1.3    1.4
1992    2.1    2.2    2.3    2.4
*/

--方法1
SELECT
  year,
  SUM  (  CASE  WHEN  month = 1  THEN  amount ELSE 0 END )  AS  m1,
  SUM  (  CASE  WHEN  month = 2  THEN  amount ELSE 0 END )  AS  m2,
  SUM  (  CASE  WHEN  month = 3  THEN  amount ELSE 0 END )  AS  m3,
  SUM  (  CASE  WHEN  month = 4  THEN  amount ELSE 0 END )  AS  m4
FROM
  statistic
GROUP  BY
  year

-->查询结果:
    year    m1     m2     m3     m4
    1991    1.1    1.2    1.3    1.4
    1992    2.1    2.2    2.3    2.4

--方法2
SELECT 
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值