这些是我的一些数据表
1)交易表
AccountID Debit Credit
1-1-1-1-1-1-1 15500 0
1-1-1-1-2-1-1 25000 0
1-1-1-1-2-1-2 15000 0
1-1-1-1-2-1-3 0 44980
1-1-1-1-1-1-1 0 26500
1-1-1-1-2-1-1 0 6480
1-1-1-1-2-1-2 0 5000
1-1-1-1-2-1-3 30000 0
1-1-1-1-2-1-2 8800 0
1-1-1-1-2-1-1 0 3900
2)预算表
Month AccountID Budget
Jan 1-1-1-1-1-1-1 4000
Feb 1-1-1-1-1-1-1 4000
March 1-1-1-1-1-1-1 4000
Jan 1-1-1-1-2-1-1 7700
Feb 1-1-1-1-2-1-1 5400
March 1-1-1-1-2-1-1 6900
Jan 1-1-1-1-2-1-2 2500
Feb 1-1-1-1-2-1-2 5200
March 1-1-1-1-2-1-2 9800
3)账户表图表
AccountID Title
1-1-1-1-1-1-1 NEW BULDING ADD.
1-1-1-1-2-1-1 AIR CONDITION
1-1-1-1-2-1-2 BED SHEETS
1-1-1-1-2-1-3 BLACK & SOFT BOARD
我希望得到这样的结果..
AccID Title Budget Amount Transaction Amount
**Sum Group By Account ID | Sum(Debit) - Sum(Credit)**
1-1-1-1-1-1-1 NEW BULDING ADD. 12000 11000
1-1-1-1-2-1-1 AIR CONDITION 20000 14620
1-1-1-1-2-1-2 BED SHEETS 17500 18800
请给我一个查询,以最低的查询成本返回我的预期结果。
提前致谢....
答案 0 :(得分:1)
Declare @Transaction table (AccountID varchar(50),Debit float,Credit float)
insert into @Transaction
select '1-1-1-1-1-1-1',15500,0 union all
select '1-1-1-1-2-1-1', 25000, 0 union all
select '1-1-1-1-2-1-2',15000, 0 union all
select '1-1-1-1-2-1-3',0,44980 union all
select '1-1-1-1-1-1-1', 0, 26500 union all
select '1-1-1-1-2-1-1', 0, 6480 union all
select '1-1-1-1-2-1-2', 0 , 5000 union all
select '1-1-1-1-2-1-3', 30000 , 0 union all
select '1-1-1-1-2-1-2', 8800, 0 union all
select '1-1-1-1-2-1-1', 0 , 3900
Declare @Budget table (Months varchar(10),AccountID varchar(50),Budget float)
insert into @Budget
select 'Jan','1-1-1-1-1-1-1',4000 union all
select 'Feb','1-1-1-1-1-1-1',4000 union all
select 'March','1-1-1-1-1-1-1',4000 union all
select 'Jan','1-1-1-1-2-1-1',7700 union all
select 'Feb','1-1-1-1-2-1-1',5400 union all
select 'March','1-1-1-1-2-1-1',6900 union all
select 'Jan','1-1-1-1-2-1-2',2500 union all
select 'Feb','1-1-1-1-2-1-2',5200 union all
select 'March','1-1-1-1-2-1-2',9800
;with CTE as
(
select AccountID,sum(Budget ) BudgetAmount from @Budget group by AccountID
)
,cte1 as
(
select AccountID,sum(debit )debit ,sum(Credit) Credit from @Transaction group by AccountID
)
select a.AccountID,c.Title,a.BudgetAmount,b.debit-b.Credit [Transaction Amount]
from cte a inner join cte1 b on a.AccountID=b.AccountID
inner join @Chart c on a.AccountID=c.AccountID
答案 1 :(得分:1)
SELECT A.AccountID
, A.Title
, B.Budget AS BudgetAmount
, T.TransactionAmount
FROM Account A INNER JOIN
(SELECT AccountID, SUM(Budget) AS Budget
FROM BudgetTable
GROUP BY AccountID) B
ON A.AccountID = B.AccountID
INNER JOIN
(SELECT AccountID, SUM(Debit) - SUM(Credit) AS TransactionAmount
FROM TransactionTable
GROUP BY AccountID) T
ON A.AccountID = T.AccountID
答案 2 :(得分:0)
查询
<强> SQLFiddleExmple 强>
SELECT A.AccountID
, A.Title
, isnull(B.Budget,0) AS BudgetAmount
, isnull(T.TransactionAmount, 0) AS TransactionAmount
FROM Account A cross apply
(SELECT SUM(Budget) AS Budget
FROM BudgetTable
WHERE BudgetTable.AccountID = A.AccountID) B
cross apply
(SELECT SUM(Debit) - SUM(Credit) AS TransactionAmount
FROM TransactionTable
WHERE TransactionTable.AccountID = A.AccountID) T
结果:
| ACCOUNTID | TITLE | BUDGETAMOUNT | TRANSACTIONAMOUNT |
|---------------|--------------------|--------------|-------------------|
| 1-1-1-1-1-1-1 | NEW BULDING ADD. | 12000 | -11000 |
| 1-1-1-1-2-1-1 | AIR CONDITION | 20000 | 14620 |
| 1-1-1-1-2-1-2 | BED SHEETS | 17500 | 18800 |
| 1-1-1-1-2-1-3 | BLACK & SOFT BOARD | 0 | -14980 |