1

行ごとに異なる 1 つの列の結果が必要です。

データは次のように表示されます。

Ticketnumber  Legnumber  Commission
100           1          50
100           2          50

これが私がそれを表示する必要がある方法です:

Ticketnumber  Legnumber  Commission
100           1          100
100           2          0

したがって、legnumber = 1 の場合、チケット番号でグループ化する手数料が必要ですが、legnumber > 1 の場合、手数料はゼロにする必要があります。ケースステートメントを書いてみましたが、役に立ちませんでした。これを達成する方法について何か提案はありますか?

4

4 に答える 4

0

私はこの解決策を使用します:

SELECT
  t1.Ticketnumber,
  t1.Legnumber,
  CASE WHEN Legnumber=1 THEN t2.sum_commission ELSE 0 END Commission
FROM
  Table1 t1 INNER JOIN (
    SELECT Ticketnumber, SUM(Commission) sum_commission
    FROM Table1
    GROUP BY Ticketnumber
  ) t2
  USING (Ticketnumber)
ORDER BY 
  t1.Ticketnumber,
  t1.Legnumber

ここでフィドルを参照してください。

于 2013-03-12T21:48:10.273 に答える
0

用途GROUP BYとインナーテーブル

SELECT TicketNumber, LegNumber, 
CASE WHEN LegNumber = 1 THEN 
(SELECT SUM(Commission)  
FROM MyTable WHERE TicketNumber = MT.TicketNumber 
GROUP BY TicketNumber) ELSE 0 END AS Commission 
FROM MyTable MT

フィドル - http://www.sqlfiddle.com/#!2/00a95/6

于 2013-03-12T19:21:18.977 に答える
0

Group By属性を使用できます

SELECT Table1.TicketNumber, LegNumber
, CASE WHEN LegNumber = 1 THEN SUM(Table2.Commission) ELSE 0 END AS Commission 
FROM Table1 JOIN (SELECT TicketNumber, sum(commission) as commission
                  FROM table1
                  GROUP BY TicketNumber) table2
ON TABLE1.TICKETNUMBER = table2.ticketnumber
GROUP BY Table1.TicketNumber, LegNumber
ORDER BY Table1.TicketNumber, LegNumber

SQL フィドル

于 2013-03-12T19:21:51.113 に答える
0

これを試して

 SELECT TicketNumber, LegNumber, 
 CASE WHEN LegNumber = 1 
      THEN (select SUM(Commission) from Table1  group by ticketnumber   ) 
      ELSE 0 END AS Commission 
 FROM Table1 GROUP BY TicketNumber, LegNumber

デモはこちら

于 2013-03-12T19:25:32.107 に答える