SimonTSN 2021-05-17 12:32 采纳率: 66.7%
浏览 38
已采纳

sql查询部门及客户收支汇总

刚刚学习sql,有个练习题不太会,特此请教,需求是查询部门客户收支月报

涉及到的有四个表,表结构只表述了主要字段

BM table  --部门表

id,code,name

KH table  --客户表

id,code,name

SK table  --收款明细表表

id,code,datetime,bmid,khid,amount

FY table  --费用支出表

id,code,datetime,bmid,khid,amount

  • 写回答

2条回答 默认 最新

  • benbenli 2021-05-17 22:46
    关注

    如果有个日历表,查询可以简单些。没有日历表,就得这么写:

    SELECT  IncomeExpense.year AS 年,
            IncomeExpense.month AS 月,
            BM.name AS 部门,
            KH.name AS 客户,
            IncomeExpense.IncomeAmount AS 收入,
            IncomeExpense.ExpenseAmount AS 支出
    FROM    BM CROSS JOIN KH
            INNER JOIN (
                SELECT  COALESCE(Income.bmid, Expense.bmid) AS bmid,
                        COALESCE(Income.khid, Expense.khid) AS khid,
                        COALESCE(Income.year, Expense.year) AS year,
                        COALESCE(Income.month, Expense.month) AS month,
                        Income.amount AS IncomeAmount, 
                        Expense.amount AS ExpenseAmount
                FROM    (
                            SELECT  bmid,
                                    khid,
                                    YEAR(datetime) AS year, 
                                    MONTH(datetime) AS month,
                                    SUM(amount) AS amount
                            FROM    SK
                            GROUP BY bmid, khid, YEAR(datetime), MONTH(datetime)
                            
                        ) AS Income
                            ON BM.id = Income.bmid AND KH.id = Income.khid
                        FULL OUTER JOIN (
                            SELECT  bmid,
                                    khid,
                                    YEAR(datetime) AS year, 
                                    MONTH(datetime) AS month,
                                    SUM(amount) AS amount
                            FROM    FY
                            GROUP BY bmid, khid, YEAR(datetime), MONTH(datetime)
                            
                        ) AS Expense
                            ON  Income.bmid = Expense.bmid 
                            AND Income.khid = Expense.khid
                            AND Income.year = Expense.year
                            AND Income.month = Expense.month
            ) AS IncomeExpense
                ON  BM.id = IncomeExpense.bmid
                AND KH.id = IncomeExpense.khid
    ORDER BY BM.name, KH.name;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码