2013-03-12 30 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