dan*_*nny 1 sql sql-server-2005 sql-server-2008
我正在尝试创建一个存储过程来从多个中检索值.问题出在表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
Run Code Online (Sandbox Code Playgroud)
但它运行不正常,因为它复制了Machine_ID,一个用于锁定,另一个用于解锁:
ID Locked Unlocked
4D9646EC 0 2
4D9646EC 12 0
Run Code Online (Sandbox Code Playgroud)
我想有这样的观点:
ID Locked Unlocked
4D9646EC 12 2
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
谢谢.
只需锁定一个总和,解锁就可以了:
select sum(locked) as Locked ,sum(unlocked) as Unlocked, ID
from tablea
inner join tableb on tablea.ID=tableb.ID
group by ID
Run Code Online (Sandbox Code Playgroud)
使用你的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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |