我试图在SQL中编写一个FULL JOIN语句,但它并没有像我想的那样正常工作。 这是我的完整陈述
SELECT
t.tacNom, bh.heuresChiffrees,
SUM(ISNULL(heures,0)) + SUM(ISNULL(minutes,0)/60) as HeuresRealisee, (ISNULL(bh.heuresChiffrees,0) - (SUM(ISNULL(heures,0)) + (SUM(ISNULL(minutes,0))/60))) as Solde,
(SUM(DISTINCT minutes)%60) as Soldeminutes
FROM tbl_BalanceHeures bh
FULL OUTER JOIN tbl_HeuresTimbrage_new ht ON ht.idProjet = bh.proIdProjetExterne
AND ht.idxTache = bh.idxTache
AND ht.idxDep= bh.idxDepartement
INNER JOIN tbl_Taches t on t.idTache = bh.idxTache
WHERE proIdProjetExterne = '00Z 000104' AND bh.idxDepartement = 184
GROUP BY t.tacNom ,bh.heuresChiffrees
以下是声明的结果
idTache heuresChiffrees HeuresRealisee Solde
332 25 0 25
330 50 0 50
327 100 42 58
331 100 23 77
以下是我的表tbl_Balance中的记录和语句
select t.idTache, bh.heuresChiffrees
from tbl_BalanceHeures bh
INNER JOIN tbl_Taches t on t.idTache = bh.idxTache
WHERE proIdProjetExterne= '00Z 000104' AND bh.idxDepartement = 184
idTache heuresChiffrees
330 50
331 100
327 100
332 25
以下是tbl_HeuresTimbrage中的记录和声明
Select t.idTache, ht.heures as heuresRealisees
From tbl_HeuresTimbrage_new ht
INNER JOIN tbl_Taches t on t.idTache = ht.idxTache
WHERE idProjet= '00Z 000104' AND ht.idxDep = 184
idTache heuresRealisees
327 32
331 23
327 10
334 4
所以,在我的FULL JOIN声明中,我应该找到
IdTache heuresChiffrees Heures Realisees
327 100 10
330 50 NULL (or 0)
331 100 23
332 25 NULL (or 0)
334 NULL(or 0) 4
我试图将我的WHERE子句放在Full JOIN中,但它没有工作
答案 0 :(得分:0)
这很可能是因为你的WHERE
条款。它作用于连接结果,因此如果A
方为空,则会消除这些行。
您可以将其更改为连接的条件,如下所示:
FROM A
FULL OUTER JOIN B
ON B.idProjet = A.proIdProjetExterne
AND B.idxTache = A.idxTache
AND B.idxDep= A.idxDepartement
AND A.proIdProjetExterne = 'xxx'
AND A.idxDepartement = 184
但是,如果没有看到您的实际数据或架构,这是一个猜测......