2013-03-12 54 views
1

我需要每行的结果不同。通过mysql中的订单项进行分组

这是怎么出现的数据:

Ticketnumber Legnumber Commission 
100   1   50 
100   2   50 

这是我需要它出现:

Ticketnumber Legnumber Commission 
100   1   100 
100   2   0 

所以当legnumber = 1我需要的佣金组由ticketnumber,但当legnumber> 1时,佣金应为零。我试图写一个案例陈述无济于事。有关如何完成此任务的任何建议?

+1

嗨,请发布您迄今尝试过的sql查询! – michi 2013-03-12 19:20:46

回答

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 Fiddle

+0

如果我只是GROUP BY TicketNumber,那么我没有得到legnumber 2的行,我只得到TicketNumber 100的一行。 – user2162384 2013-03-12 19:32:12

+0

我修复了我的查询。 – 2013-03-12 19:32:48

+0

工作正常!谢谢! – user2162384 2013-03-12 20:17:27

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

+1

“TicketNumber,LegNumber'不是'SUM',不仅仅是'TicketNumber'? – 2013-03-12 19:23:25

+0

你说得对。查询编辑。 – 2013-03-12 19:26:51

+0

你看过小提琴吗?它是给100. – 2013-03-12 19:39:04

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 

DEMO HERE

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 

请参阅小提琴here