开发者

SQL SUM of distinct rows.... I'm stuck!

Been trying to put together an SQL query that sorts data into financial years (which I've sorted) and then SUMs it according to each distinct value in the开发者_JS百科 claim_id column

table structure is: claim(id, claim_id, date, amount)

SQL so far is:

 SELECT
    CASE 
       WHEN MONTH(date)>=4 THEN
            concat(YEAR(date), '-',YEAR(date)+1)
       ELSE 
            concat(YEAR(date)-1,'-', YEAR(date)) 
    END AS fyear,
    SUM(amount) AS total, claim_id
 FROM claim  
 GROUP BY fyear, claim_id 
 ORDER BY claim_id ASC, date ASC

At the moment I'm getting this

Array
(
    [fyear] => 2009-2010
    [total] => 567.89
    [claim_id] => 1
)

Which is really close, except of course because of the GROUP BY claim_id I'm getting another array for each distinct claim_id:

Array
(
    [fyear] => 2009-2010
    [total] => 106.76
    [claim_id] => 2
)

What I'd actually like is:

Array
(
    [fyear] => 2009-2010
    [total1] => 567.89
    [total2] => 106.76
)

Any suggestions please?

Thanks!


Wrapping your existing query in another SELECT and using GROUP_CONCAT might do what you are after. I've tested the SQL itself, but am not sure if the results are what you want - all your totals will appear in one column as a comma separated list:

SELECT fyear, GROUP_CONCAT(total) FROM (
    SELECT
        CASE 
           WHEN MONTH(date)>=4 THEN
                concat(YEAR(date), '-',YEAR(date)+1)
           ELSE 
                concat(YEAR(date)-1,'-', YEAR(date)) 
        END AS fyear,
        SUM(amount) AS total, claim_id
    FROM table1  
    GROUP BY fyear, claim_id 
    ORDER BY claim_id ASC, date ASC
) AS totals GROUP BY fyear;


Would something like...

SELECT * FROM
    SELECT (CASE 
                WHEN MONTH(date)>=4 THEN
                     concat(YEAR(date), '-',YEAR(date)+1)
                ELSE 
                     concat(YEAR(date)-1,'-', YEAR(date)) 
                END AS fyear,
                SUM(amount) AS total, claim_id
        FROM claim
        WHERE claim_id = 1
        GROUP BY fyear
        ORDER BY date ASC),
    SELECT (CASE 
                WHEN MONTH(date)>=4 THEN
                     concat(YEAR(date), '-',YEAR(date)+1)
                ELSE 
                     concat(YEAR(date)-1,'-', YEAR(date)) 
                END AS fyear,
                SUM(amount) AS total, claim_id)
        FROM claim
        WHERE claim_id = 2
        GROUP BY fyear
        ORDER BY date ASC)
    FROM dual;

be of any use?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜