如何加入具有特定要求的4个表?

时间:2012-11-25 13:12:57

标签: sql sql-server join sum

我有4张桌子。

Procedures

Name   Cost
Proc1  10
Proc2  20
Proc3  30
Proc4  40

MaterialsUsed

NameOfTheProcedure  MaterialUsed  AmountOfMaterialUsed
proc1               mat1              1
proc2               mat2              3
proc3               mat3              2
proc4               mat4              1

Materials

Name   Id   Price
mat1   1    10
mat2   2    20
mat3   3    30
mat4   4    40

ProceduresDone

ClientID   NameOfProcedure  Date
Client1    proc1            2012-11-24
Client2    proc2            2012-11-23
Client3    proc3            2012-11-24
Client4    proc4            2012-11-23

我需要编写一个返回特定日期完成的程序的查询。它应该有3列(NameOfTheProcedure,HowManyTimesThatProcedureWasDoneInThatDay,TotalPrice)。 TotalPrice列包括材料表和第一步的价格。

是否可以使用单个查询执行此操作?

编辑:

示例结果应该类似于(2012-11-24日期):

NameOfTheProcedure    AmountOfTimesProcedureWasDoneThatDay    TotalPrice
proc1                 1                                       20
proc3                 1                                       90

1 个答案:

答案 0 :(得分:1)

尝试这样的事情,

SELECT  a.NameOfTheProcedure,
        COUNT(a.NameOfTheProcedure) AmountOfTimesProcedureWasDoneThatDay,
        SUM(b.AmountOfMaterialUsed * d.Price) +
        SUM(c.Cost) TotalPrice
FROM    ProceduresDone a
        INNER JOIN MaterialsUsed b
            ON a.NameOfProcedure = b.NameOfTheProcedure
        INNER JOIN Procedures c
            ON c.Name = a.NameOfProcedure
        INNER JOIN Materials d
            ON b.MaterialUsed = d.Name
WHERE   a.Date = '2012-11-24'