繁体   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