簡體   English   中英

第一個表中的所有值,即使其他表上沒有匹配項

[英]All values from first table, even if nothing matchs on other tables

我有三個表(如下所示,帶有相關的列)

表SALESSaleCodes

"SaleCode" VARCHAR(2) COLLATE "ANSI" DEFAULT '',
"Description" VARCHAR(25) COLLATE "ANSI" DEFAULT ''

表INVOIHeader

"DocNum" INTEGER DEFAULT 0,
"AcctDate" DATE

表INVOI項目

"DocNum" INTEGER DEFAULT 0,
"SaleCode" VARCHAR(2) COLLATE "ANSI" DEFAULT '',
"Cost" DECIMAL(19,2) DEFAULT 0.00,
"SellPrice" DECIMAL(19,2) DEFAULT 0.00,
"LaborEach" DECIMAL(19,2) DEFAULT 0.00,
"QtySold" DECIMAL(19,2) DEFAULT 0.00

我編寫了此語句,該語句返回SALESSaleCodes中的所有salecode和我嘗試獲取的相應列,包括count為零且總和為NULL的列。

SELECT a.SaleCode, a.Description, COUNT(b.SaleCode) AS Count, SUM(b.SellPrice * b.QtySold) AS Parts,
SUM(b.LaborEach * b.QtySold) AS Labor, SUM(b.Cost * b.QtySold) AS Cost
FROM SALESSaleCodes a
LEFT JOIN INVOIItems b ON a.SaleCode = b.SaleCode
GROUP BY a.SaleCode
ORDER BY a.SaleCode

我需要的是考慮到INVOIHeader中AcctDate的日期,該日期介於兩個給定日期之間。

我試過了

SELECT a.SaleCode, a.Description, COUNT(b.SaleCode) AS Count, SUM(b.SellPrice * b.QtySold)     AS Parts,
SUM(b.LaborEach * b.QtySold) AS Labor, SUM(b.Cost * b.QtySold) AS Cost
FROM SALESSaleCodes a
LEFT JOIN INVOIItems b ON a.SaleCode = b.SaleCode
LEFT JOIN INVOIHeader c ON b.DocNum = c.DocNum
WHERE c.AcctDate BETWEEN
CAST('2013-10-01' AS DATE) AND
CAST('2013-10-31' AS DATE)
GROUP BY b.SaleCode
ORDER BY b.SaleCode

但是,返回的結果只是落在該范圍內的SaleCodes,並沒有給我SALESSaleCodes提供的所有SaleCodes。

無論它們是否在此范圍內,並且僅在該日期范圍內的總和和計數,我都需要什么語句來獲取所有SaleCode。 其他總和為NULL。

我正在使用SQL 2003標准(ANSI ISO / IEC 9075:2003)的ElevateDB中工作。 我知道你們中的大多數都是Oracle,SQLServer或MySQL用戶,但我想我會在這里問一下,看看你們能想到什么。

...    
    WHERE (
      (c.AcctDate BETWEEN CAST('2013-10-01' AS DATE) AND CAST('2013-10-31' AS DATE))
      OR c.AcctDate IS NULL
    )
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM