查询SQL Server以使用CTE和连接获取总计

时间:2016-05-03 05:50:03

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2012 sql-server-2012-express

我有一个以下的查询,我从昨天开始尝试使用employeeId和各种条件的员工的33条记录:

With CTE 
(
    select EmployeeId, and other colums with joins and conditions.
)

现在我想加入这个查询,从下面的表table1和table2中获取每个员工的发票总和。

table1employeeid,因此我的CTE已employeeid我可以将其加入table1

With CTE 
(
     select EmployeeId, and other colums with joins and conditions.
) 
select *, table1.invoiceId 
from CTE 
left join table1 on table1.employeeid = CTE.employeeId
left join table2 on table2.invoiceid = table1.invoiceid 
groupby

但我的table1只有发票,而且每张这样的发票都有其他表中的金额,即table2。 table2有列"金额"我需要总结一下取决于invoiceid。

为了更清楚,我正在编写表结构或输出如下。 我正在尝试上面但他们没有显示正确的结果

假设CTE

Emplyeeid empName Empaddress empcode
1          john    America    121
2          sandy    America   122

现在table1有

InvoiceId EmployeeId  RecordId PAyeeid
1           1            223     202
2           1            222     212
3           1            121     378
4           2            229     987
5           2            345     333

table2具有epmloyee每张发票所需的库存量

现在是table2

InvLine     Invoiceid    Amount
1             1            30
2             1            30
3             1            20
4             2            10
5             2            10
6             2            10

输出应该按照员工约翰在表1中有两张发票,即Id 1和2,而1和2的发票则需要加起来

Emplyeeid  empName Empaddress empcode  Amount
1           john    America    121      80

1 个答案:

答案 0 :(得分:3)

    With CTE 
    (
     select EmployeeId, and other colums with joins and conditions.
    ) 

    With CTE1 
    (
     select EmployeeId,table1.invoiceid  
     from cte 
     left join table1 on table1.employeeid=CTE.employeeId
    ) 

    select sum(amount), cte1.employeeId from CTE1 
    left join table2 on table2.invoiceid = cte1.invoiceid 
    group by cte1.employeeId

但你可以在第一个cte本身加入table1。如果第一个cte很简单,就没有必要去第二个cte。