[sql] SQL Server 쿼리-DISTINCT를 사용하여 COUNT (*) 선택

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

이것은 저를 거기에 데려다 주지만 별개의 이름이 아닌 모든 프로그램 이름을 세는 것입니다 (이 쿼리에서 예상하지는 않습니다). 별개의 프로그램 이름을 선택하지 않고 계산하는 방법을 내 머리에 감쌀 수는 없습니다. 또는 뭔가.



답변

모든 DISTINCT 프로그램 이름을 프로그램 유형 및 푸시 번호로 계산

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>): 그룹의 각 행에 대한 표현식을 평가하고 널이 아닌 고유 한 값의 수를 리턴합니다.


답변

각 고유 값의 발생 횟수를 가져와야했습니다. 열에 지역 정보가 포함되었습니다. 내가 끝내었던 간단한 SQL 쿼리는 다음과 같습니다.

SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region

나에게 다음과 같은 목록을 줄 것입니다.

Region, count
Denmark, 4
Sweden, 1
USA, 10


답변

고유 한 열에 대한 파생 테이블을 생성 한 다음 해당 테이블에서 카운트를 쿼리해야합니다.

SELECT COUNT(*)
FROM (SELECT DISTINCT column1,column2
      FROM  tablename
      WHERE condition ) as dt

여기 dt 은 파생 테이블입니다.


답변

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


답변

이 시도:

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


답변

이것은 마지막 주소 필드에 저장된 핀 코드 수를 얻으려는 좋은 예입니다.

SELECT DISTINCT
    RIGHT (address, 6),
    count(*) AS count
FROM
    datafile
WHERE
    address IS NOT NULL
GROUP BY
    RIGHT (address, 6)


답변

select  count (distinct NumTar),'PROPIAS'
from ATM_TRANe with (nolock)
where Fecha>='2014-01-01'
  AND Fecha<='2015-05-31'and NetDestino=0
  and SystemCodResp=0
group by NetDestino
union
select sum (contar),'FORANEAS'
from
(
  select  count(distinct NumTar) as contar
  from ATM_TRANe with (nolock)
  where Fecha>='2014-01-01'
    AND Fecha<='2014-01-31'
    and NetDestino!=0
    and SystemCodResp=0
  group by NetDestino
)dt