2014-10-08 45 views
0

我使用MySQL 38年5月5日,並得到了如下表(這只是一個片段,真正的一個含有〜500個產品):SQL環路與數據彙總

+------+-------+----------+-------+--------+ 
| id | date | product | type | sales | 
+------+-------+----------+-------+--------+ 
| 4513 | 14958 | XXXXXXX |  1 |  3 | 
| 4514 | 14958 | XXXXXXX |  2 |  5 | 
| 4519 | 14958 | YYYYYYY |  1 |  10 | 
| 4531 | 14958 | YYYYYYY |  3 | 150 | 
| 4534 | 14959 | ZZZZZZZ |  1 |  5 | 
| 4536 | 14959 | ZZZZZZZ |  2 |  5 | 
|+------+-------+----------+-------+--------+ 

從中我需要每天生成銷售量產品:

+-------+----------+----------+----------+ 
| date | XXXXXXX | YYYYYYY | ZZZZZZZ | 
+-------+----------+----------+----------+ 
| 14958 |  8 |  110 |  0 | 
+-------+----------+----------+----------+ 
| 14959 |  0 |  0 |  10 | 
|+------+----------+----------+----------+ 

結果表必須看起來就像上面 - 的產品在列,天行。

只是尋找一些指針,而不是一個工作的解決方案。謝謝,帕維爾。

+3

http://stackoverflow.com/q/7674786/1169798 – Sirko 2014-10-08 18:31:58

+0

可以在一個查詢中完成,爲你的xxxx,yyyy,xxx和總和使用案例,然後按組合。 – boomoto 2014-10-08 18:32:26

+0

你想要按照產品和訂單按日期進行總計(銷售)和分組 – 2014-10-08 18:34:07

回答

1

對於動態聚合,與CONCAT

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT  
    CONCAT('SUM(CASE WHEN product= "',  
    product, '" THEN sales ELSE 0 END) AS ' 
    , product)) 
INTO @sql 
FROM 
    my_table; 

SET @sql = CONCAT('SELECT date, ', @sql, ' 
        FROM my_table 
        GROUP BY date'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

使用使用GROUP_CONCAT條件casegroup by(靜態)

SELECT s.date, 

SUM(
CASE 
WHEN s.product='XXXXXXX' 
THEN s.sales 
ELSE 0 
END 
) AS 'XXXXXXX', 

SUM(
CASE 
WHEN s.product='YYYYYYY' 
THEN s.sales 
ELSE 0 
END 
) AS 'YYYYYYY', 

SUM(
CASE 
WHEN s.product='ZZZZZZZ' 
THEN s.sales 
ELSE 0 
END 
) AS 'ZZZZZZZ' 

FROM my_table s 
GROUP BY s.date; 
+0

@pawel:對您有幫助嗎? – 2014-10-08 19:01:44

+0

我提供的數據顯然是表格的一小部分。其中一個包含幾百種產品。所以,硬編碼的案例不會像我希望的那樣讓我受益。 – 2014-10-08 19:04:45

+0

@PawelPogorzelski:我想現在應該有所幫助。 – 2014-10-08 19:58:03