2017-04-14 58 views
0

總結總我有以下SQL列表中的所有數據,合併重複的行和使用MySQL

SELECT 
    i.si_num AS `id`, 
    DATE_FORMAT(i.si_date, '%d-%b-%Y') AS `date`, 
    i.si_tr AS `tr`, 
    d.dl_name AS `customer`, 
    i.si_net_value AS `net`, 
    DATEDIFF(CURDATE(), si_date) AS Days, 
    t.value AS tval, 
    t.label AS label 
FROM 
    invoices AS i 
LEFT JOIN 
    dealer AS d ON i.si_tr = d.dl_id 
LEFT JOIN 
    transactions AS t ON i.si_num = t.invoice 
WHERE 
    i.si_tr = 'TR580494' 
ORDER BY `si_num` DESC; 

電流輸出

+-----+-----------+----------+---------------------+---------+------+-------+-------+ 
| id | date | tr |  customer  | net | Days | tval | label | 
+-----+-----------+----------+---------------------+---------+------+-------+-------+ 
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790 | 55 | 96070 | acr | 
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790 | 55 | 10080 | crn | 
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790 | 55 | 3640 | crn | 
| 240 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 0  | 60 | NULL | NULL | 
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975 | 60 | 30405 | acr | 
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975 | 60 | 51570 | crn | 
| 132 | 3-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 38132.5 | 70 | 33282 | acr | 
+-----+-----------+----------+---------------------+---------+------+-------+-------+ 

,你可以看到有一些重複的行是生成像id:404 這些行中唯一的區別是列'tval'中的值'&'標籤'

'tval'和'label'列可以爲每個id填充多次,我試圖實現的是每個重複記錄我想查看標籤是'crn'還是'arc'並且總和對應於id的值並生成一行並將標籤轉置爲列。請參閱下面的預期輸出。

預期輸出

+-----+-----------+----------+---------------------+---------+------+-------+-------+ 
| id | date | tr |  customer  | net | days | crn | acr | 
+-----+-----------+----------+---------------------+---------+------+-------+-------+ 
| 404 | 18-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 109790 | 55 | 13720 | 96070 | 
| 240 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 0  | 60 | NULL | NULL | 
| 239 | 13-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 81975 | 60 | 51570 | 30405 | 
| 132 | 3-Feb-17 | TR580494 | STARSHIP ENTERPRISE | 38132.5 | 70 | NULL | 33282 | 
+-----+-----------+----------+---------------------+---------+------+-------+-------+ 

回答

0

你可以做與casesum

SELECT 
    i.si_num AS `id`, 
    DATE_FORMAT(i.si_date, '%d-%b-%Y') AS `date`, 
    i.si_tr AS `tr`, 
    d.dl_name AS `customer`, 
    i.si_net_value AS `net`, 
    DATEDIFF(CURDATE(), si_date) AS Days, 
    sum(case when t.label = 'acr' then t.value else null end) as acr 
    sum(case when t.label = 'crn' then t.value else null end) as crn 
FROM 
    invoices AS i 
LEFT JOIN 
    dealer AS d ON i.si_tr = d.dl_id 
LEFT JOIN 
    transactions AS t ON i.si_num = t.invoice 
WHERE 
    i.si_tr = 'TR580494' 
GROUP BY i.si_num, 
      DATE_FORMAT(i.si_date, '%d-%b-%Y'), 
      i.si_tr, 
      d.dl_name, 
      i.si_net_value, 
      DATEDIFF(CURDATE(), si_date) 
ORDER BY `si_num` DESC; 
+0

非常感謝斯特凡諾賈尼尼,工作就像一個魅力... – Prem

+0

非常感謝斯特凡諾,工作就像一個魅力...然而,有一個小錯誤拋出,案件陳述是不完整的得到糾正 SUM(CASE WHEN t.label ='acr'THEN t.value ELSE NULL END)AS acr 謝謝隊友 :) – Prem

+0

注意到,我編輯了我的答案,你必須添加的改進 –

相關問題