I forlængelse af mit tidligere spørgsmål (
http://www.udvikleren.dk/forum/38761/optimere-stored-procedure-kald/ )hvor jeg fik super hjælp, har jeg et nyt problem:
I denne kode er der udeladt en MASSE kolonner i den øverste select som ikke har betydning for problemstillingen.
- SELECT
-
- ht.ID,
- ht.APP_USER_ID,
- a.EMPLOYEE AS APP_USER,
- wp.ID AS WAGE_PERIOD_ID,
- wp.WAGE_PERIOD,
- CONVERT(DECIMAL(10,2),hg.DAYS),
- CONVERT(DECIMAL(10,2),hg.HOURS),
-
- FROM
- dbo.APP_USER AS a
-
- [b]INNER JOIN
-
- (
- SELECT h.TRANSACTION_ID,
- ISNULL(SUM(-h.HOURS), 0) AS HOURS,
- ISNULL(SUM(-h.DAYS), 0) AS DAYS
- FROM dbo.HISTORICAL_BALANCE AS h
- GROUP BY h.TRANSACTION_ID
- ) AS hg[/b]
-
- INNER JOIN
-
- dbo.HISTORICAL_TRANSACTION AS ht ON hg.TRANSACTION_ID = ht.ID
-
- LEFT OUTER JOIN
-
- dbo.WAGE_PERIOD AS wp ON wp.ID = ht.WAGE_PERIOD_ID
-
- ON a.ID = ht.APP_USER_ID
-
- WHERE
- ((ht.ABSENCE_CANCEL_STATUS IS NULL) OR (ht.ABSENCE_CANCEL_STATUS = 0))
har jeg et problem med denne inner join:
- INNER JOIN
-
- (
- SELECT h.TRANSACTION_ID,
- ISNULL(SUM(-h.HOURS), 0) AS HOURS,
- ISNULL(SUM(-h.DAYS), 0) AS DAYS
- FROM dbo.HISTORICAL_BALANCE AS h
- GROUP BY h.TRANSACTION_ID
- ) AS hg
Hvis den ikke returnerer noget fra historical_balance, tager den slet ikke rækken med. Det giver god mening, da jeg bruger en inner join, men selv om jeg ændrer det til en LEFT JOIN, kommer hele rækken stadig ikke med.
Hvordan får jeg kolonnerne CONVERT(DECIMAL(10,2),hg.DAYS) og CONVERT(DECIMAL(10,2),hg.HOURS) til at være 0 i stedet for at hele rækken forsvinder hvis det er tilfældet?
Indlæg senest redigeret d. 10.09.2012 10:15 af Bruger #9814