2011-08-03 11 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、のための1つを複製するので、それがうまく機能していないロックとアンロックのためのもう一つは:

ID   Locked Unlocked 
4D9646EC 0  2 
4D9646EC 12  0 

が、私はこの見解を持っているしたいと思います:

ID   Locked Unlocked 
4D9646EC 12  2 

どうすればいいですか?

ありがとうございました。

答えて

7

単にようにロックされ、ロック解除の合計を実行します。

あなたのSQLを使用して
select sum(locked) as Locked ,sum(unlocked) as Unlocked, ID 
from tablea 
inner join tableb on tablea.ID=tableb.ID 
group by ID 

、私はこれは動作するはずだと思う:

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

は、それが働いて、ありがとうございます!私はあなたが提案したようにしました、私は唯一の変更は、サブクエリをビューに配置することでした。 – danny

関連する問題