我有2个具有以下结构的表:
------------------------------------
| dbo.Katigories | dbo.Products |
|-----------------|------------------|
| product_id | product_id |
| Cat_Main_ID | F_material |
| Cat_Sub_ID | |
我想要完成的是以下内容:
我希望COUNT
有多少独特的产品(来自Products
表)有Cat_Main_ID
= 111,有Cat_Sub_ID
= 222,并且有{{1} 1}} = 10
我尝试过以下F_material
声明:
SELECT COUNT
上述声明正在运行,并且计算正确的产品,但却给了我重复的记录。 例如:当一个产品只属于一个类别时,我的计数结果是正确的,因此我得到数字1。但是,当产品属于多个类别时,计数结果不正确,具体取决于产品所属的类别。我知道重复的原因是我的某些产品同时属于多个类别或子类别,因此我的计数结果不正确。
如果有人可以帮助我使用SELECT DISTINCT COUNT(*) AS METR_AN_EXEI_001
FROM dbo.Products P
INNER JOIN dbo.Katigories K
ON P.product_id = K.product_id
AND
K.Cat_Main_ID = 111
AND
P.F_material = 10
AND
K.Cat_Sub_ID = 222
语句的语法,以便从我的COUNT
表中获取正确数量的产品(没有重复项),我们将非常感激。
!!!!!!!!!!!!! ---------------------------------- ------- !!!!!!!!!!
亲爱的。
请原谅我给您带来的不便!
我太蠢了,我把你的代码放在我页面的错误位置。最终几乎所有的建议都是正确的。
现在我遇到了问题,我不知道我选择哪种答案是正确的。所有这些都是正确的!
非常感谢你们所有人,我再次向你们所有人道歉。
答案 0 :(得分:2)
我认为在这种情况下,分组应该是不同的
SELECT product_id, COUNT(product_id)
METR_AN_EXEI_001
FROM dbo.Products P
INNER JOIN dbo.Katigories K
ON P.product_id = K.product_id
AND
K.Cat_Main_ID = 111
AND
P.F_material = 10
AND
K.Cat_Sub_ID = 222
GROUP BY P.product_id
答案 1 :(得分:1)
你可以尝试用subselect来计算,就像这样:
DECLARE @Katigories TABLE ( product_id int , Cat_Main_ID int , Cat_Sub_ID int )
DECLARE @Products TABLE( product_id int , F_material int )
INSERT INTO @Products (product_id,F_material) VALUES (1, 10)
INSERT INTO @Products (product_id,F_material) VALUES (2, 10)
INSERT INTO @Products (product_id,F_material) VALUES (3, 15)
INSERT INTO @Katigories ( product_id ,Cat_Main_ID ,Cat_Sub_ID ) VALUES ( 1,111, 222 )
INSERT INTO @Katigories ( product_id ,Cat_Main_ID ,Cat_Sub_ID ) VALUES ( 1,123, 223 )
INSERT INTO @Katigories ( product_id ,Cat_Main_ID ,Cat_Sub_ID ) VALUES ( 1,444, 222 )
INSERT INTO @Katigories ( product_id ,Cat_Main_ID ,Cat_Sub_ID ) VALUES ( 2,133, 223 )
SELECT
P.product_id,
(SELECT COUNT(*) FROM @Katigories WHERE product_id = P.product_id AND Cat_Main_ID=111 AND Cat_Sub_ID=222 AND P.F_material=10) AS METR_AN_EXEI_001
FROM @Products P
答案 2 :(得分:0)
如果您需要计算不同的产品,请使用count(distinct ...)
。这样的事情。
SELECT COUNT(DISTINCT P.product_id) AS METR_AN_EXEI_001
FROM dbo.Products P
INNER JOIN dbo.Katigories K
ON P.product_id = K.product_id
AND
K.Cat_Main_ID = 111
AND
P.F_material = 10
AND
K.Cat_Sub_ID = 222