1

我需要一列的结果在每一行上都不同。

这是数据的显示方式:

Ticketnumber  Legnumber  Commission
100           1          50
100           2          50

这就是我需要它出现的方式:

Ticketnumber  Legnumber  Commission
100           1          100
100           2          0

因此,当legnumber = 1 时,我需要按ticketnumber 对佣金进行分组,但是当legnumber > 1 时,佣金应该为零。我试图写一个案例陈述无济于事。关于如何做到这一点的任何建议?

4

4 回答 4

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