【问题标题】:SQL Statement for displaying sum column in resulted query用于在结果查询中显示总和列的 SQL 语句
【发布时间】:2023-01-23 21:16:11
【问题描述】:

我有三个表 - 第一个表描述了项目工作和下一个子工作:

PROJET_ID WORK_ID MAIN_WORK_ID WORK_NAME
1 10 1 Building-01

第二个表描述了工作活动:

ACTIVITY_ID PROJET_ID WORK_ID ACTIVITY_NAME
1 1 10 Tiling
2 1 10 Metal Works

第三个表包括活动成本:

ACTIVITY_ID PROJET_ID ACTIVITY_COST
1 1 500
1 1 750
2 1 350

我创建了这个查询来按工作和子工作安排对第一个表进行排序:

SELECT 
    a.WORK_ID, a.MAIN_WORK_ID, a.WORK_NAME
FROM 
    PROJECTSWORKS a  
WHERE 
    a.PROJET_ID = 1
ORDER BY 
    CASE 
        WHEN a.WORK_ID = a.MAIN_WORK_ID THEN a.MAIN_WORK_ID
        WHEN a.WORK_ID < a.MAIN_WORK_ID THEN a.WORK_ID
        WHEN a.WORK_ID > a.MAIN_WORK_ID THEN a.MAIN_WORK_ID 
    END

现在我需要结果表(来自我的查询)有包含每个子工作的总成本的附加列,我知道我应该使用子查询或 JOIN 语句,但我不知道如何在我的内部进行询问。

查询应返回如下结果:

WORK_ID Total_Cost
10 1600

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以忽略第二个表(只要您不需要按活动拆分成本),并在匹配 PROJET_ID 时将第一个表与第三个表连接起来。然后对活动成本应用聚合。

    SELECT tab1.WORK_ID, SUM(tab3.ACTIVITY_COST)
    FROM       PROJECTSWORKS tab1  
    INNER JOIN tab3
            ON tab1.PROJET_ID = tab3.PROJET_ID
    WHERE tab1.PROJET_ID = 1
    GROUP BY tab1.WORK_ID
    

    查看演示 here

    【讨论】:

    • 抱歉,结果表应该来自我的查询,您附加的 SQL 语句将显示基于 PROJECT_ID 的结果,而我想要的结果应该基于 WORK_ID 所以第二个表不能被忽略案件 。
    • 您的陈述对所有子作品显示相同的价值..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2019-06-14
    • 2018-01-19
    相关资源
    最近更新 更多