2

動作するクエリがあり、それが効率的かどうかわかりません。

テーブル列:

  1. p_type:STRING販売、cancelsell、bank、cancelbankにすることができます
  2. id
  3. fid
  4. 単位

実行する操作:

  1. 各プロセスタイプのSUM(単位)sell、cancelsell、bank、cancelbank。
  2. SUM(売りの単位)-SUM(売りの単位)、SUM(銀行の単位)-SUM(銀行のキャンセルの単位)

注:すべての選択について同じ値で確認する必要がありますが、各選択でidとfidも確認しています。

既存のクエリ:

    select sell-cancelsell scount, bank-cancelbank bcount from

    (select sum(a.unit) as sell from table1 a where   
    a.p_type = 'Sell' and a.id=1 and a.fid=2 ),

    (select sum(c.unit) as cancelsell from table1  c where      
    c.p_type = 'CancelSell' and c.id=1 and c.fid=2),

    (select sum(b.unit) as bank from table1  b where     
    b.p_type = 'Bank' and b.id=1 and b.fid=2),

    (select sum(d.unit) as cancelbank from table1  d where  
    d.p_type = 'CancelBank' and d.id=1 and d.fid=2)

十分ですか?誰かがそれをより効率的にする方法を提案することができればそれは素晴らしいことです。

4

3 に答える 3

5

あなたはこれを行うことができます

select 
sum(Case when a.p_type = 'sell' then a.unit else null end) as sellUnit, 
sum(Case when a.p_type = 'CancelSell' then a.unit else null end) as CancelSellUnit,
sum(Case when a.p_type = 'Bank' then a.unit else null end) as BankUnit ,
sum(Case when a.p_type = 'CancelBank' then a.unit else null end) as CancelBankUnit  
from table1 a where and a.id=1 and a.fid=2 
于 2012-09-28T13:22:19.857 に答える
2

これを試して:

SELECT 
        SUM(CASE WHEN P_TYPE = 'SELL' THEN UNIT END) - 
        SUM(CASE WHEN P_TYPE = 'CANCELSELL' THEN UNIT END) AS SCOUNT,
        SUM(CASE WHEN P_TYPE = 'BANK' THEN UNIT END) -
        SUM(CASE WHEN P_TYPE = 'CANCELBANK' THEN UNIT END) AS BCOUNT 
FROM    TABLE1  
WHERE   ID=1 AND FID=2 
于 2012-09-28T13:34:30.343 に答える
0
select temp1.sumunit - temp2.sumunit,temp3.sumunit-temp4.sumunit from
(select p_type,sum(unit) as sumunit from table1
group by p_type) as temp1
inner join
(select p_type,sum(unit) as sumunit from table1
group by p_type) as temp2 on temp2.p_type = 'cancelsell' 
inner join
(select p_type,sum(unit) as sumunit from table1
group by p_type) as temp3 on temp3.p_type = 'bank'
inner join
(select p_type,sum(unit) as sumunit from table1
group by p_type) as temp4 on temp4.p_type='cancelbank'
where temp1.p_type='sell'
and temp1.id = 1 and temp1.fid = 2
and temp2.id = 1 and temp2.fid = 2
and temp3.id = 1 and temp3.fid = 2
and temp4.id = 1 and temp4.fid = 2
于 2012-09-28T13:51:03.060 に答える