简体   繁体   中英

How to GROUP_CONCAT this query

I have query.

SELECT fdl.fdlDate,t.tankName,SUM(fdl.fdlMeter-lfdl.fdlMeter) AS fdlMeter ,(SELECT IFNULL(SUM(fdtCapa),0) FROM `fueldisptest` WHERE fdtDate = fdl.fdlDate AND compID = "DDY") AS fdtCapa
FROM `tanks` AS t
INNER JOIN `fueldisps` AS fd ON fd.tankID = t.tankID
INNER JOIN `fueldisplogs` AS fdl ON fdl.fuelDispID = fd.fuelDispID 
INNER JOIN `fueldisplogs` AS lfdl ON lfdl.fuelDispID = fd.fuelDispID AND lfdl.fdlDate = SUBDATE(fdl.fdlDate,1)
WHERE  (fdl.fdlDate BETWEEN "2016-01-01" AND "2016-01-31")
AND (lfdl.fdlDate BETWEEN "2015-12-31" AND "2016-01-30")
AND t.compID = "DDY" AND fd.compID = "DDY" AND fdl.compID = "DDY" AND lfdl.compID = "DDY"
GROUP BY fdl.fdlDate,t.tankID
ORDER BY fdl.fdlDate,t.tankID,fd.fuelDispID
LIMIT 0,100

And it give result like this.

fdlDate    |  tankName    |  fdlMeter     |  fdtCapa  
-----------------------------------------------------
2016-01-01 | T1           | 100.00        | 0
2016-01-01 | T2           | 200.00        | 0
2016-01-01 | T3           | 300.00        | 0
2016-01-01 | T4           | 400.00        | 0
2016-01-02 | T1           | 200.00        | 0
2016-01-02 | T2           | 300.00        | 0
2016-01-02 | T3           | 400.00        | 0
2016-01-02 | T4           | 500.00        | 0
...

But I want to use GROUP_CONCAT to make result like this.

fdlDate    |  fdlMeter                      |  fdtCapa  
----------------------------------------------------------------------
2016-01-01 | 100.00,200.00,300.00,400.00    | 0
2016-01-02 | 200.00,300.00,400.00,500.00    | 0
...

How to edit my query to get this result? Thank you.

You can add Group_Concat on top of your result

Try this

SELECT fdlDate,
       group_concat(lfdlMeter order by tankName  separator ',') as fdlMeter,      
       fdtCapa
FROM   (SELECT fdl.fdlDate,
               t.tankName,
               Sum(fdl.fdlMeter - lfdl.fdlMeter) AS lfdlMeter,
               (SELECT Ifnull(Sum(fdtCapa), 0)
                FROM   fueldisptest
                WHERE  fdtDate = fdl.fdlDate
                       AND compID = "DDY")       AS fdtCapa
        FROM   tanks AS t
               INNER JOIN fueldisps AS fd
                       ON fd.tankID = t.tankID
               INNER JOIN fueldisplogs AS fdl
                       ON fdl.fuelDispID = fd.fuelDispID
               INNER JOIN fueldisplogs AS lfdl
                       ON lfdl.fuelDispID = fd.fuelDispID
                          AND lfdl.fdlDate = Subdate(fdl.fdlDate, 1)
        WHERE  ( fdl.fdlDate BETWEEN "2016-01-01" AND "2016-01-31" )
               AND ( lfdl.fdlDate BETWEEN "2015-12-31" AND "2016-01-30" )
               AND t.compID = "DDY"
               AND fd.compID = "DDY"
               AND fdl.compID = "DDY"
               AND lfdl.compID = "DDY"
        GROUP  BY fdl.fdlDate,
                  t.tankID
        ORDER  BY fdl.fdlDate,
                  t.tankID,
                  fd.fuelDispID) s
GROUP  BY fdlDate,
          fdtCapa 
LIMIT 0,100

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM