写入查询以获得具有最小查询成本的数据

时间:2014-02-14 11:50:20

标签: sql-server tsql sql-server-2012

这些是我的一些数据表

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   

请给我一个查询,以最低的查询成本返回我的预期结果。

提前致谢....

3 个答案:

答案 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

Sqlfiddle

答案 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 |