1

以下のような2つのテーブルがあります

id TID reserveddate fee1 fee2 fee3 Noofplayers total
-------------------------------------
1   11  2012-11-25 100  200  300      3        800
2   12  2012-11-25 100  200  300      3        800
3   13  2012-11-28 200  100  200      1        500

プレイヤー

 TID  fee1 fee2 
-------------------------------------
  11  100  200  
  11  100  200  
  11  100  200 
  12  100  200  
  12  100  200
  12  100  200
  13  200  100  

今、Reserveddate でグループ化された両方のテーブルからデータを取得したいと思います。

質問があります、

select sum(b.fee1)+sum(b.fee2)+sum(a.fee3) as total 
from Players b,book a where a.TID = b.TID  and a.ReservedDate ='25-nov-2012' 
group by a.ReservedDate

上記の sum(fee3) のクエリに 3(noofplayers) 回を追加すると、1 つのタイム ブック テーブルが追加されます。

クライアントの要件に従ってクエリを更新していただけますか...

4

3 に答える 3

1

これでうまくいくと思います。合計で 2400 になります。

select  sum(b.fee1_fee2_totalPerPlayer) + sum(a.fee3) as total 
from    book a
join    (
            select  TID,
                    sum(fee1) + sum(fee2) 
                        as fee1_fee2_totalPerPlayer
            from    Players
            group   by TID
        ) b on
        a.TID = b.TID
where   a.ReservedDate ='2012-11-25' 
group by a.ReservedDate

合計の計算方法は次のとおりです。

TID=11 の場合: 300 (Players.fee1 の合計) + 600 (Players.fee2 の合計) = 900

TID=12 の場合: 300 (Players.fee1 の合計) + 600 (Players.fee2 の合計) = 900

900 + 900 = 1800

1800 + 600 (日付「2012-11-25」の Book.fee3 の合計) = 2400

以下に例を示します: SQL フィドル

于 2012-11-28T12:39:03.593 に答える
0

だからあなたはSUM一日にしたいですか?CTEは次のように使用できますSUM(...)OVER

WITH CTE AS
(
   SELECT b.id, b.TID AS bTID, b.reserveddate, b.fee1, b.fee2, b.fee3, b.Noofplayers
     ,    p.TID AS pTID,  p.fee1 AS pFee1, p.fee2 AS pFee2
     ,    SUM(b.fee1 + b.fee2 + a.fee3) OVER (PARTITION BY DATEADD(day, DATEDIFF(dd, 0, ReservedDate), 0)) As total
     ,    DATEADD(day, DATEDIFF(dd, 0, ReservedDate), 0) AS ReservedDateDay
   FROM Book b INNER JOIN Players p ON b.TID=p.TID
)
SELECT total FROM CTE WHERE ReservedDateDay='20121125';
于 2012-11-28T12:10:04.273 に答える
0

noofplayersがplayerテーブルのエントリ数であることが確実な場合は、 fee3の合計をnoofplayerで単純に割ることができます。

select sum(b.fee1)+sum(b.fee2)+(sum(a.fee3)/noofplayer) as total 
from Players b,book a where a.TID = b.TID  and a.ReservedDate ='25-nov-2012' 
group by a.ReservedDate

noofplayerが正しいかどうかわからない場合は、次のように同じレコードでplayersテーブルをフィルタリングできます

select sum(b.fee1)+sum(b.fee2)+sum(a.fee3) as total 
from book a 
join (select distinct TID, fee1, fee3 from players) as b
on a.TID = b.TID
where  a.ReservedDate ='25-nov-2012' 
group by a.ReservedDate
于 2012-11-28T12:12:31.360 に答える