SQL Server查询 - 使用DISTINCT选择COUNT(*)

som*_*ore 402 sql t-sql sql-server sql-server-2005

在SQL Server 2005中,我有一个表cm_production,其中列出了所有已投入生产的代码.该表有ticket_number,program_type,program_name和push_number以及其他一些列.

目标:按程序类型和推送号计算所有DISTINCT程序名称

到目前为止我所拥有的是:

DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type
Run Code Online (Sandbox Code Playgroud)

这让我在那里,但它计算所有的程序名称,而不是不同的程序名称(我不希望它在该查询中做).我想我无法绕过如何告诉它只计算不同的程序名而不选择它们.或者其他的东西.

Rem*_*anu 688

按程序类型和推送编号计算所有DISTINCT程序名称

SELECT COUNT(DISTINCT program_name) AS Count,
  program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type
Run Code Online (Sandbox Code Playgroud)

DISTINCT COUNT(*)将为每个唯一计数返回一行.您需要的是COUNT(DISTINCT <expression>):计算组中每行的表达式,并返回唯一的非空值的数量.

  • 独特!=独特。不同意味着值与其他值不同。它可以有重复项,我们可以使用 DISTINCT 删除重复项。另一方面,唯一值仅存在一次,它们没有重复项。 (2认同)

Net*_*964 101

我需要得到每个不同值的出现次数.该列包含区域信息.我最终得到的简单SQL查询是:

SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region
Run Code Online (Sandbox Code Playgroud)

哪个会给我一个列表,比如说:

Region, count
Denmark, 4
Sweden, 1
USA, 10
Run Code Online (Sandbox Code Playgroud)


小智 36

您必须为不同的列创建临时表,然后从该表中查询计数

SELECT COUNT(*) 
FROM (SELECT DISTINCT column1,column2
      FROM  tablename  
      WHERE condition ) as dt
Run Code Online (Sandbox Code Playgroud)

这里的dt是临时表

  • 请注意,这里"dt"的常规术语是_derived_ table,而不是临时表 (5认同)

van*_*van 15

SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type
Run Code Online (Sandbox Code Playgroud)


KM.*_*KM. 14

试试这个:

SELECT
    COUNT(program_name) AS [Count],program_type AS [Type]
    FROM (SELECT DISTINCT program_name,program_type
              FROM cm_production 
              WHERE push_number=@push_number
         ) dt
    GROUP BY program_type
Run Code Online (Sandbox Code Playgroud)