2011-08-03 39 views
1

我正在嘗試創建一個存儲過程以從多個值中檢索值。問題是表A中有一個布爾類型(isLocked),我必須爲每個狀態創建一個列('Locked'和'Unlocked')。下面是我寫的查詢:如何在SQL中合併2行

SELECT Machine.Machine_ID, 
SUM(FinanceDonnee.CoutHoraire) AS Total, 
CASE 
WHEN FinanceDonnee_isLocked = 1 
THEN 
    SUM(FinanceDonnee.CoutHoraire) 
ELSE 
    0 
END 
AS Locked, 
CASE 
WHEN FinanceDonnee_isLocked= 0 
THEN 
    SUM(FinanceDonnee.CoutHoraire) 
ELSE 
    0 
END 
AS Unlocked 
FROM   ICR INNER JOIN 
      FinanceDonnee ON Machine.Machine_ID = FinanceDonnee.FinanceDonnee_Machine_ID 
GROUP BY ICR_ID, FinanceDonnee.FinanceDonnee_isLocked 

,但它不能正常工作很好,因爲它複製Machine_ID,一個用於鎖定和另一個用於解鎖:

ID   Locked Unlocked 
4D9646EC 0  2 
4D9646EC 12  0 

我想有這樣的觀點:

ID   Locked Unlocked 
4D9646EC 12  2 

我該怎麼辦?

謝謝。

回答

7

只需做鎖定,解鎖既然這麼一筆:

select sum(locked) as Locked ,sum(unlocked) as Unlocked, ID 
from tablea 
inner join tableb on tablea.ID=tableb.ID 
group by ID 

使用你的SQL,我想這應該工作:

SELECT machine_id AS id, 
     SUM(locked) AS locked, 
     SUM(unlocked) AS unlocked 
FROM (SELECT machine.machine_id, 
       SUM(financedonnee.couthoraire) AS total, 
       CASE 
       WHEN financedonnee_islocked = 1 THEN SUM(
       financedonnee.couthoraire) 
       ELSE 0 
       END       AS locked, 
       CASE 
       WHEN financedonnee_islocked = 0 THEN SUM(
       financedonnee.couthoraire) 
       ELSE 0 
       END       AS unlocked 
     FROM icr 
       INNER JOIN financedonnee 
       ON machine.machine_id = financedonnee.financedonnee_machine_id 
     GROUP BY icr_id, 
        financedonnee.financedonnee_islocked) t 
GROUP BY t.machine_id 
+0

謝謝你,它的工作!我確實喜歡你的建議,我做的唯一修改是將子查詢放入View中。 – danny