我有一个带有联接的简单查询,该联接正确返回了有关产品的信息:
select
t1.category,t1.color,t1.size,t2.aisle
from infoTable t1
inner join locationTable t2 on t1.aisleNumber = t2.aisleNumber;
这将返回
category | color | size | aisle
--------------------------------------
A Red S F12
B Blue M G18
C Green L H9
D Yellow XL D19
到目前为止,很好。
现在,我想加入一个表,该表告诉我哪些商店有每种产品,以及每种产品有多少种。我正在另一张表的每个商店中手动检查这些产品,以确保我的数据准确无误。
select
t1.category,t2.aisle,count(case when t3.storeNumber = 11 then 1 else 0 end) as storeNumber11
count(case when t3.storeNumber = 31 then 1 else 0 end) as storeNumber31
count(case when t3.storeNumber = 41 then 1 else 0 end) as storeNumber41
from infoTable t1
inner join locationTable t2 on t1.aisleNumber = t2.aisleNumber
inner join storetable t3 on t1.category = t3.category and t1.color = t3.color and t1.size = t3.size
group by t1.category,t3.storeNumber
我很接近,但是结果不正确。我明白了:
category | color | size | aisle | storeNumber11 | storeNumber31 | storeNumber41
--------------------------------------------------------------------------------------------
A Red S F12 17 17 17
B Blue M G18 12 12 12
C Green L H9 14 14 14
D Yellow XL D19 16 16 16
在手动检查第一行的storeNumber11应该有17个但对于31和41应该为零之后,我知道了一个事实。第二行的storeNumber11应该为零,而storeNumber31应该为12个。
所以我没有得到零,而只得到了相同的值,这一事实表明我显然有些不对劲。我会获得正确的行数和其他信息,但是,如果满足对t3的联接,我该如何解决此问题,以正确地仅对那些商店号进行计数?