【发布时间】:2014-12-15 21:47:04
【问题描述】:
想象一下有一个 Stores 表:
- 身份证
- 商店编号
- 分公司名称
想象有另一个“SalesData”表:
- 身份证
- 月
- 年份
- 商店编号
- 获得的金额
Stores 表总是被填充。 SalesData 不是。它仅在何时填充。
我正在努力提出以下查询,如果在给定的月份和年份没有记录,并且 AmountAquired 为空,它将为每个商店返回结果。
同时,另一个增加的复杂性(可能是单独的查询)是在哪里带回销售数据中没有数据的所有商店(使用 StoreNumber 上的连接),但如果有数据则只带回有数据的那家商店的行,而忽略该商店没有数据的那一行。
我尝试了左外连接和右外连接,但没有成功。
SELECT s.* FROM Stores s
LEFT OUTER JOIN SalesData sd ON
sd.StoreNumber = s.StoreNumber
WHERE sd.Year = 2014 AND sd.Month = 11 AND sd.AmountAquired IS NULL.
这只会带回年份和月份为 2014 和 11 的记录(这并不奇怪,因为这是我在 where 子句中写的!)
我想要它让我返回销售数据中没有数据的记录,或者月份和年份与给它的参数匹配的地方(而不是任何其他月份或任何其他年份,除非列值中有 NULL )
它应该总是带回数据(几乎来自商店表以显示所有商店......以及在销售数据表中找不到的任何数据(或者即使给定月份和年份的数据也存在)对于没有数据的商店)
希望这是有道理的。
【问题讨论】:
-
愚蠢的问题,但你试过做第二个和一个或吗?
-
@AxGryndr - 是的,我相信是的。听起来不错。
标签: sql sql-server