2013-06-20 3 views
0

가 MAX가 있다는 간단한 쿼리에게 내가 아는 사실 내 경우저장 프로 시저가 :

SELECT SUM(Field1), Field2 FROM TableName GROUP BY Field2 

를 취할 수 있습니다 요약 resilts로 행을 출력 매개 변수에 배치 FIELD2 5 개 고유 값 (1-5) 따라서이 쿼리는 최대 5 개의 행을 반환합니다 (예를 들어 Field2 값이 2 인 레코드가없는 경우 더 적을 수 있음).

흥미로운 점은 속한 Field2 값을 기준으로 SUM(field1)의 값을 OUTPUT 매개 변수에 저장하는 것입니다. 현재 스토어드 프로 시저 (단순화)에서이 작업을 수행합니다.

SELECT @prm1 = SUM(Field1) FROM TableName WHERE Field2=1 
SELECT @prm2 = SUM(Field1) FROM TableName WHERE Field2=2 
SELECT @prm3 = SUM(Field1) FROM TableName WHERE Field2=3 
SELECT @prm4 = SUM(Field1) FROM TableName WHERE Field2=4 
SELECT @prm5 = SUM(Field1) FROM TableName WHERE Field2=5 

더 좋은 방법이 있나요?

편집 :이 저장 프로 시저가 10 개 이상의 쿼리를 실행하고 각각에서 요약을 가져옵니다. 클라이언트와 별도로 10 개 이상의 다른 쿼리를 실행하지 않도록 결정했지만 하나의 저장 프로 시저에 저장 한 다음 출력 매개 변수를 통해 결과를 반환합니다. 이러한 쿼리는 일괄 적으로 만 호출 할 목적으로는 사용되지 않습니다. 그러나 이것이 좋은 생각이 아니라고 생각한다면, 나는 당신의 주장을 경청 할 것입니다.

+0

데모? 왜 그냥'SELECT'의 결과를 돌려주지 않는가? 이 출력물을 어떻게 사용하고 있는지 질문에 포함시켜야합니다. – EkoostikMartin

+0

약 12-15 개의 요약 값을 계산하여 응용 프로그램에 반환하기 때문에. 따라서 내 응용 프로그램에서 12 개의 다른 쿼리를 실행하는 대신 하나의 저장 프로 시저를 통해 실행하고 결과를 출력 매개 변수를 통해 응용 프로그램에 전달합니다. – Goran

답변

0

당신이 할 수있는 조건 여기 SUM()

SELECT @prm1 = SUM(CASE WHEN field2 = 1 THEN field1 ELSE NULL END), 
     @prm2 = SUM(CASE WHEN field2 = 2 THEN field1 ELSE NULL END), 
     @prm3 = SUM(CASE WHEN field2 = 3 THEN field1 ELSE NULL END), 
     @prm4 = SUM(CASE WHEN field2 = 4 THEN field1 ELSE NULL END), 
     @prm5 = SUM(CASE WHEN field2 = 5 THEN field1 ELSE NULL END) 
    FROM Table1 

입니다 SQLFiddle 왜 출력 매개 변수를해야 않습니다