qzh1991 2017-03-09 04:45 采纳率: 0%
浏览 1120

sql 分组按要求在一行显示问题

请教个sql问题 怎么按date和voucher_id 查询出所有的tax_type 并显示在一行
如图 就是把1767和1768后面的两个税放到1762中的位置

 select id,date,voucher_id,abstract,invoice_amount,tax_type,
if(tax_type='营业税',invoice_amount,'') 营业税,
if(tax_type='城市维护建设税',invoice_amount,'') 城市维护建设税,
if(tax_type='教育费附加',invoice_amount,'') 教育费附加,
if(tax_type='地方教育费附加',invoice_amount,'') 地方教育费附加,
if(tax_type='土地增值税',invoice_amount,'') 土地增值税
from cost where tax_type !='';

图片说明

用了group by 但应该不是这么写 请教大神

 select id,date,voucher_id,abstract,invoice_amount,tax_type,
if(tax_type='营业税',invoice_amount,'') 营业税,
if(tax_type='城市维护建设税',invoice_amount,'') 城市维护建设税,
if(tax_type='教育费附加',invoice_amount,'') 教育费附加,
if(tax_type='地方教育费附加',invoice_amount,'') a地方教育费附加,
if(tax_type='土地增值税',invoice_amount,'') 土地增值税
from cost where tax_type !=''
group by date,voucher_id;

图片说明

  • 写回答

1条回答 默认 最新

  • luxy_wang 2017-03-09 06:00
    关注

    因为每条数据的id和abstract是不一样的,所以建议不参与统计,要实现你所说的功能,可以使用mysql的行转列函数MAX,实现如下:

     select b.date,b.voucher_id,
    MAX(CASE b.tax_type WHEN '营业税' THEN b.invoice_amount ELSE 0 END) as '营业税',
    MAX(CASE b.tax_type WHEN '城市维护建设税' THEN b.invoice_amount ELSE 0 END) as '城市维护建设税',
    MAX(CASE b.tax_type WHEN '教育费附加' THEN b.invoice_amount ELSE 0 END) as '教育费附加',
    MAX(CASE b.tax_type WHEN '地方教育费附加' THEN b.invoice_amount ELSE 0 END) as '地方教育费附加',
    MAX(CASE b.tax_type WHEN '土地增值税' THEN b.invoice_amount ELSE 0 END) as '土地增值税'
    from cost b where tax_type !=''
    group by date,voucher_id
    

    不知是否是你想要的结果

    评论

报告相同问题?

悬赏问题

  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的