来自SELECT DISTINCT COUNT语句

时间:2018-05-28 17:16:03

标签: sql sql-server

我有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表中获取正确数量的产品(没有重复项),我们将非常感激。

!!!!!!!!!!!!! ---------------------------------- ------- !!!!!!!!!!

亲爱的。

请原谅我给您带来的不便!

我太蠢了,我把你的代码放在我页面的错误位置。最终几乎所有的建议都是正确的。

现在我遇到了问题,我不知道我选择哪种答案是正确的。所有这些都是正确的!

非常感谢你们所有人,我再次向你们所有人道歉。

3 个答案:

答案 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