繁体   English   中英

如何在SQL中合并2行

[英]How can I merge 2 rows in SQL

我正在尝试创建一个存储过程来从多个值中检索值。 问题在于表A中有一个布尔类型(isLocked),我必须为每个状态(“ Locked”和“ Unlocked”)创建一列。 这是我写的查询:

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

我该怎么做?

谢谢。

只需对锁定和解锁的对象求和:

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  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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