1

ここに 3 つのクエリがあります。重要なことは、3 つのクエリはすべて日付範囲に基づいており、qry 1 assestnumber を snissued および snredeemed と一致させる必要があることです。前もって感謝します

select 
    assetnumber, sum(mocalc),sum(micalc), sum(cocalc),sum(cicalc)
from 
    drops
where  
    dropdate > '09/01/2012' 
    and dropdate < dateadd(hour,-0,getdate())
group by 
    assetnumber

select 
    snissued,sum(amount) 
from 
    tickets
where  
    dateissued > '09/01/2012' 
    and dateissued < dateadd(hour,-0,getdate())
group by 
    snissued

select 
    snredeemed,sum(amount) 
from 
    tickets
where  
    dateredeemed > '09/01/2012' 
    and dateredeemed < dateadd(hour,-0,getdate())
group by 
    snredeemed

最初に、私が使用している4つのフィールドを合計し、指定された日付範囲の資産番号でグループ化しています

2 つ目は、別のテーブルから日付範囲の snissued の金額の合計を取得しています

出力については、最初のテーブルが必要です。次に、さらに2つの列が必要です snissued(合計金額) および snredeemed (合計金額)

ここに現在の出力があります

qry 1
0-2459-36182    843 869 14  40
0-2621-31924    64700   86900   3000    25200
0-2739-41401    5702    5738    204 236

クエリ 2

0-2459-36182    162800
0-2621-31924    145000
0-2739-41401    298200

クエリ 3

0-2459-36182    157200
0-2621-31924    157800
0-2739-41401    292800

これは私が望む結果です

0-2459-36182    843     869     14      40     162800  157200  
0-2621-31924    64700   86900   3000    25200  145000  157800
0-2739-41401    5702    5738    204     236    298200  292800
4

2 に答える 2

1
select 
    q1.*, snissuedsum, snredeemedsum
from
(
    select assetnumber, sum(mocalc) q11,sum(micalc) q12, sum(cocalc) q13,sum(cicalc) q14
    from drops 
    where  dropdate > '09/01/2012' 
    and dropdate < dateadd(hour,-0,getdate()) 
    group by assetnumber 
) q1
left join
(
    select snissued,sum(amount) snissuedsum 
    from tickets 
    where  dateissued > '09/01/2012' 
    and dateissued < dateadd(hour,-0,getdate()) 
    group by snissued 
) q2
  on q1.assetnumber = q2.snissued
  left join
(     
    select snredeemed,sum(amount) snredeemedsum
    from tickets 
    where  dateredeemed > '09/01/2012' 
    and dateredeemed < dateadd(hour,-0,getdate()) 
    group by snredeemed 
) q3
  on q1.assetnumber = q3.snredeemed
于 2012-09-05T11:36:54.147 に答える
0

私が収集したものから、他の人が提案したようにUNIONを探していませんが、資産番号ごとにsnissuedとsnredeemedを示す2つの追加の列を持つために3行が必要です。あれは正しいですか?その場合、次のように 3 つすべてで左結合を実行します。

select DRPS.assetnumber, DRPS.MOCALCSUM,DRPS.MICALCSUM,
    DRPS.COCALCSUM,DRPS.CICALCSUM,ISSUED.TotalIssued,REDEEMED.TotalRedeemed
from (select assetnumber, sum(mocalc) AS [MOCALCSUM],sum(micalc) AS [MICALCSUM],
        sum(cocalc) AS [COCALCSUM],sum(cicalc) AS [CICALCSUM]
        from drops
        where  dropdate > '09/01/2012' and dropdate < dateadd(hour,-0,getdate())
        group by assetnumber) AS DRPS
LEFT JOIN (select snissued,sum(amount) AS [TotalIssued] from tickets
    where  dateissued > '09/01/2012' and dateissued < dateadd(hour,-0,getdate())
    group by snissued) AS ISSUED
    ON DRPS.assetnumber=ISSUED.snissued
LEFT JOIN (select snredeemed,sum(amount) AS [TotalRedeemed] from tickets
    where  dateredeemed > '09/01/2012' and dateredeemed < dateadd(hour,-0,getdate())
    group by snredeemed) AS REDEEMED
    ON DRPS.assetnumber=REDEEMED.snredeemed

それが正しいことを願っています!エラーがあれば投稿してください。修正します。

于 2012-09-05T11:50:23.543 に答える