在SQL Server 2005中,我有一个名为cm_production
的表,列出了所有投入生产的代码。该表具有ticket_number
、program_type
、program_name
和push_number
以及其他一些列。
目标:按程序类型和推送号计算所有不同的程序名称的数量。
到目前为止,我拥有:
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
这让我走了一半路程,但它正在计算所有程序名称,而不是独特的名称(我不指望在那个查询中做到这一点)。我想我无法理解如何告诉它仅计算不同的程序名称,而不选择它们。或者说我对如何实现这一点感到困惑。
按程序类型和推送号计算所有不同的程序名称的数量
SELECT COUNT(DISTINCT program_name) AS Count, program_type AS [Type] FROM cm_production WHERE push_number=@push_number GROUP BY program_type
DISTINCT COUNT(*)
会为每个唯一计数返回一行。您需要的是COUNT(DISTINCT <expression>)
:对每个组中的行评估表达式,并返回唯一的非空值的数量。