一个类似行列互换的sql语句

 求教一个类似行列互换的sql语句!
我现在有张表cityorder,有如下几个列:id,amount,city,date。表中有以下一些记录:
id       amount     city      date
1         12         001       08-11-16
2         14         001       08-11-17
3         25         002       08-11-16
4         23         002       08-11-17
我想求教记录按如下方式展示的sql语句????
city     08-11-16         08-11-17
001      12                 14
002      25                 23

 

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

 

只取一条记录的值

SELECT
DISTINCT
city,(SELECT TOP 1 amount FROM cityorder WHERE city=a.city AND CONVERT(CHAR(10),date,121)='2008-11-16') AS '08-11-16',
(SELECT TOP 1 amount FROM cityorder WHERE city=a.city AND CONVERT(CHAR(10),date,121)='2008-11-17') AS '08-11-17'

FROM cityorder a

 

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

 

select
  city,
  (select sum(amount) from cityorder where sdate= to_date('08-11-16','yy-mm-dd')) "08-11-16",
  (select sum(amount) from cityorder where sdate= to_date('08-11-17','yy-mm-dd')) "08-11-17"
from cityorder
group by city;

也许这个对你来说更合适

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

 

oracle有比较方便的行列互换函数

以下是mysql的方式
select x.city,x.amount1,x.amount2 from(select c.city,Group_concat(if(c.date='08-11-16',c.amount,'') separator '') as 08-11-16,Group_concat(if(c.date='08-11-17',c.amount,'') separator '') as 08-11-17 from cityorder c group by c.city) as x;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值