2013-08-21 4 views
1

SQL 쿼리에 문제가 있으며이를 파악할 수 없습니다. 확실히 나는 그것에 대해 모든 잘못을 할거야.SQL Server 집계 및 합계

기본적으로 PRVDR_NUM 및 ITM_VAL 있습니다. 관련 ITM_VALS를 요약하여 각 PRVDR_NUM에 "합산 된"ITM_VAL [SumReimb가 별칭]을 갖도록합니다.

PRVDR_NUM은 실제로 다른 테이블에 있습니다. RPT_REC_NUM의 내부 조인을 사용하여 두 테이블에 모두 관련이 있습니다.

다음은 작동하지 않는 예제입니다.

SELECT PRVDR_NUM,SUM(ITM_VAL) as SumReimb FROM hha2011num 
INNER JOIN hha2011rpt ON hha2011num.RPT_REC_NUM = hha2011rpt.RPT_REC_NUM 
WHERE (WKSHT_CD='D000000' AND LINE_NUM = '01201') AND (CLMN_NUM='0100' OR CLMN_NUM='0200') 

GROUP BY PRVDR_NUM,ITM_VAL ORDER BY ITM_VAL 

내가 합산있어 중요한 것은이 CLMN_NUM 0100 및 0200이며, 각각 다른 항목 값을 가지고 있고 나는 PRVDR_NUM에 의해 다음 그룹을 그들을 추가 할합니다.

제안 사항?

SQL에서 주요 문제는 GROUP, Aggregates 및 Calculated 필드입니다. 어떻게 묶을 지 모르겠습니다. 나는 이틀 전에 SQL을 배우기 시작했다. 이 라인 아래

편집 ------------

은 다음 두 가지입니다하지만 같은 쿼리를해야합니다.

SELECT RPT_REC_NUM,SUM(ITM_VAL) SumReimb FROM hha2011num 
WHERE (WKSHT_CD='D000000' AND LINE_NUM = '01201') AND CLMN_NUM in('0100','0200') 

GROUP BY RPT_REC_NUM ORDER BY SumReimb 

SELECT PRVDR_NUM,SUM(ITM_VAL) as SumReimb FROM hha2011num 
INNER JOIN hha2011rpt ON hha2011num.RPT_REC_NUM = hha2011rpt.RPT_REC_NUM 
WHERE WKSHT_CD='D000000' AND LINE_NUM = '01201' AND CLMN_NUM in('0100','0200') 
GROUP BY PRVDR_NUM ORDER BY SumReimb 

지금; 그들 사이의 대부분의 데이터는 다른 하나보다 39 개의 항목이있는 것을 제외하면 동일합니다. 아마 두 번째 데이터에서 단지 소수의 데이터가 내가 예상 한 것보다 더 높은 순위를 갖는 이유 일 것입니다.

+2

ITM_VAL로 그룹화하고 정렬하는 이유는 무엇입니까? 합계하는 것으로 그룹화 할 수 없으며 주문할 수도 없습니다. 당신은 'Sum By Sort By PRVDR_NUM ORDER'또는 'SumReimb DESC BY GROUP BY PRVDR_NUM ORDER'를 원하셨습니까? 옆으로,이 란을 지명 한 사람을 매질하십시오. –

+0

@AaronBertrand : 도넛과 전 메인 프레임 프로그래머가이 칼럼에 이름을지었습니다. – HardCode

+0

@AaronBertrand여보세요 메디 케어/메디 케이드 비용 보고서. 당신은 내가 지금 cms.gov에있는 것처럼 많은 재미를 가질 수 있습니다 :) –

답변

2
SELECT PRVDR_NUM,SUM(ITM_VAL) as SumReimb FROM hha2011num 
INNER JOIN hha2011rpt ON hha2011num.RPT_REC_NUM = hha2011rpt.RPT_REC_NUM 
WHERE WKSHT_CD='D000000' AND LINE_NUM = '01201' AND CLMN_NUM in('0100','0200') 
GROUP BY PRVDR_NUM ORDER BY PRVDR_NUM 

group by 및 order by 절에서 ITM_VAL을 제거하십시오. 또한 CLMN_NUM 열의 값을 확인하거나 사용하는 대신 where 절에서 작은 변경을 수행했습니다. "IN"을 사용할 수 있습니다.

+0

나는 그것을 과거에 사용했고, 나는 높은쪽으로가는 데이터를 얻고 있습니다. –

+1

@ user1741874 그러면 샘플 데이터와 예상 * 결과가 표시됩니다. –

+1

결과가 너무 높으면'JOIN' 기준이 불완전하여 데카르트 곱을 얻었 기 때문입니다. 위의 대답은 질문에 대해 예상 한대로 정확합니다. 'SELECT *'를 시도하고 위의'GROUP BY '를 제거하여'JOIN'이 부족한 곳을 찾으십시오. –