2014-10-23 4 views
0

나는 오프 일이있는 것 같아이 쿼리를 작동시키는 것처럼 보일 수 없습니다.특정 열의 중복 값을 계산하는 추가 열을 추가하는 SQL

처음 DISTINCT를 사용하지 않고 내 쿼리가 2 행의 반복 포함 :

STAT  SHNO  UPDD   UPDT  ORDERNO 
40  ASN123 20141022 150048  40303020 
30  ASN124 20141022 150048  40303021 
30  ASN124 20141022 150048  40303021 
40  ASN123 20141022 150048  40303020 
30  ASN125 20141022 150048  40303021 

을 나는 DISTINCT 포함하도록 쿼리를 변경 :

SELECT DISTINCT 
    STAT, SHNO, UPDD, UPDT, ORDERNO 
FROM 
    BLUEWATER         

내가 지금 원하는 결과 집합을 얻을 :

STAT   SHNO   UPDD  UPDT  ORDERNO 
30   SHN124  20141022  150048  40303021 
30   SHN125  20141022  150048  40303021 
40   SHN123  20141022  150048  40303020 

하지만 내가하려는 것은 COUNT를 사용하여 공동 작업을 생성하는 것입니다.

STAT   SHNO   UPDD  UPDT  ORDERNO  ORDERNOCOUNT  
30   SHN124  20141022  150048 40303021  2     
30   SHN125  20141022  150048 40303021  2     
40   SHN123  20141022  150048 40303020  1     
+0

이 사용중인 SQL Server 버전에 태그를하시기 바랍니다, 그래서 우리는 생각하지 않는. 또한, 처음에는'DISTINCT'가 필요하다는 사실은 근본적인 디자인에 근본적인 문제가 있다는 단서입니다. (비밀스런 컬럼 이름 때문에 누가 그 이름을 지었습니까?) 디자인 문제가 무엇인지 짐작할 수없는 것은 대부분 불가능합니다. –

+0

이름은 나에게도 암호이며 일부 열에 대한 설명이 포함 된 스프레드 시트를 받았습니다. 나는 그들 모두를 필요로하지는 않을 것이다. 클라이언트 액세스 권한이 없으며 항상 VPN을 통해 연결하기가 실용적이지 않으므로 SQL Server R2에서 DB2 테이블을 다시 만들었습니다. 당신의 도움을 주셔서 감사합니다 ! –

답변

1

난 그냥 그룹화를 사용하는 거라고 및 COUNT() OVER ... 당신이 사용하고있는 버전 : 내 결과에 lumn는 ORDERNO이 고유하지 다음과 같은 얻을하고자하는 행을 계산인가?

SELECT STAT, SHNO, UPDD, UPDT, ORDERNO, 
     COUNT(*) OVER (PARTITION BY ORDERNO) AS ORDERNOCOUNT 
FROM BLUEWATER  
GROUP BY STAT, SHNO, UPDD, UPDT, ORDERNO 

하위 선택

SELECT gsub.STAT, gsub.SHNO, gsub.UPDD, gsub.UPDT, gsub.ORDERNO, sub.c AS ORDERNOCOUNT 
FROM 
(
    SELECT STAT, SHNO, UPDD, UPDT, ORDERNO 
    FROM BLUEWATER 
    GROUP BY STAT, SHNO, UPDD, UPDT, ORDERNO 
) gsub 
JOIN (
    SELECT ORDERNO, COUNT(*) as c 
    FROM BLUEWATER 
    GROUP BY ORDERNO 
) as sub ON gsub.ORDERNO = sub.ORDERNO 
+0

'SHNO'가 바뀌기 때문에 처음 두 결과에 대해 1 대신 2를 얻습니다. –

+1

OP가 귀찮아하지 않아서 (COUNT (*) OVER (PARTITION BY ORDERNO))를 사용하는 것이 더 적절 해 보입니다. 그들이 사용하는 버전을 언급 ... –

+0

@AaronBertrand - 좋은 지적 ... 고칠거야 ... \ – Hogan

관련 문제