2012-10-22 4 views
3

네 개의 매개 변수가있는 요구 사항이 있습니다. p1, p2, p3, p4. 사용자는 단일 또는 조합 중 하나를 입력 할 수 있습니다. 나는 그가 합계 및 그룹화하여 입력하는 열만 표시하려고합니다. 다른 열은 제외해야합니다. 어떻게해야합니까? (귀하의 질문은 매우 모호하기 때문에 아니에요 특정 100 %)이 같은Oracle에서 동적으로 합계 및 그룹화하십시오.

+1

사용자는 응용 프로그램 (웹, 데스크탑, 명령 줄, 중요하지 않음)을 통해 데이터를 입력합니다. 응용 프로그램에서 동적으로 쿼리를 작성해야합니다. PLSQL 질문이 아닙니다. –

+0

질문이 명확하지 않습니다. * 요약 및 그룹화 *는 무엇을 의미합니까? 피봇 팅을해야합니까? –

+0

그 쿼리를 만드는 방법을 알고 싶습니다. 그는 24 가지 조합을 입력 할 수 있기 때문에. 예를 들어 그가 p1을 입력하면 p2는 p1, p2로 테이블 그룹에서 p2를 선택하여 표시해야합니다. p2와 유사합니다. 현명한 p1 , p3 그는 입력 할 수 있습니다 .p1, p2, p3, p4 als0.Jus -1.Hop 내가 명확하게 내 요구 사항을 설명 –

답변

1

뭔가 잘 SQL은 종종 이러한 유형의 매우 저조한 수행, 그러나,

SELECT 
    CASE WHEN :p1 = 0 THEN p1 ELSE NULL END AS p1, 
    CASE WHEN :p2 = 0 THEN p2 ELSE NULL END AS p2, 
    CASE WHEN :p3 = 0 THEN p3 ELSE NULL END AS p3, 
    CASE WHEN :p4 = 0 THEN p4 ELSE NULL END AS p4 
FROM 
    yourTable 
GROUP BY 
    CASE WHEN :p1 = 0 THEN p1 ELSE NULL END, 
    CASE WHEN :p2 = 0 THEN p2 ELSE NULL END, 
    CASE WHEN :p3 = 0 THEN p3 ELSE NULL END, 
    CASE WHEN :p4 = 0 THEN p4 ELSE NULL END 

가 알고 있어야 당신 을 위해 작동 할 수있다 쿼리의.

고정 쿼리 각각에 대해 별도의 계획이 컴파일됩니다. 결과를 생성하는 알고리즘 사용은 그 시점에서 고정되어 있습니다. 매개 변수가 변경되면 다시 컴파일되지 않습니다.

색인에 따라 GROUP BY p1, p2GROUP BY p3, p4과 근본적으로 다른 계획이 될 수 있으므로 중요합니다.

때문에 코드에서 SQL 문을 다시 생성하는 것이 훨씬 더 효과적 일 수 있습니다.

매개 변수를 사용하여 집계되는 필드를 선택하도록 SQL에 요청하는 대신 매개 변수를 사용하여 새로운 SQL 문을 작성하고 대신 새 SQL 문을 실행하십시오.

0

이 문제는 동적 SQL을 사용하여 해결할 수 있습니다 도움이 될 수 있습니다. 동적 SQL에서 먼저 입력 매개 변수에 대한 SELECT 문을 구성한 다음 예를 들어 SQL 문을 사용하여 쿼리를 실행할 수 있습니다. 즉시 통보. 동적 SQL 사용 방법은 oracle documentation을 읽어보십시오.