2011-05-12 2 views
1

현재 하나의 그룹/모드 조합에 대해 작동하는 SQL 쿼리를 개발 중입니다. 그러나이 쿼리는 모든 그룹과 모드에서 작동해야합니다. 각 조합은 한 번만 포함하십시오. 그러나 원본 데이터에는 다른 여러 열이 있으므로 조합 당 둘 이상의 레코드가 있습니다.FOR 루프를 SQL에 공식화하는 방법은 무엇입니까?

그래서 내 소스 테이블 구조는 다음과 같습니다

group mode p-val 
----- ---- ------ 
A  B  4.567 
C  D  3.694 

내가 어떻게 설정 각 그룹/모드 조합을 통해 루프 루프? 그리고 나는 커서를 사용하지 않을 것입니다!

+0

이전에 요청한대로 게시물의 형식을 올바르게 지정하십시오. 각 단계에서 루프가 수행하는 작업은 무엇입니까? 본질적으로 절차 적이라면 커서가 아닌 다른 루핑 구문을 사용해야 할 특별한 이유가 없습니다 (결과 열을 반복하도록 특별히 설계된 것처럼). 최선은 세트 기반 방식으로 다시 작성하는 것이지만, 여기서 나가기 위해서는 정확하게 제로 정보를 주셨습니다. –

+0

샘플 입력 또는 예상 출력을 표시하고 있습니까? – Thomas

+0

@ 토마스, 이것은 샘플 입력입니다. – salvationishere

답변

2

매우 광범위하고 일반적인 질문입니다. 다음은 광범위하고 일반적인 대답입니다.

먼저 각 세트가 고유하도록 관심있는 값 세트를 추출하는 쿼리를 작성하십시오. SELECT DISTINCT...SELECT... GROUP BY...이 좋습니다.

이 데이터는 임시 테이블로 저장되거나 하위 쿼리로 포함되거나 전체 최종 쿼리에 포함될 수 있습니다. 최선의 방법은 전적으로 귀하가하고있는 일에 달려 있습니다.

다음으로이 하위 집합을 기준으로 "main"처리 쿼리를 작성하십시오. ...FROM <theSubset> INNER JOIN <etc>과 같은 것입니다.

올바르게 설정 했으므로 (이 설정이 쉬운 것은 아닙니다)이 세트 기반 방법론의 효과는 절차 적 루핑을 통해 얻은 결과와 매우 유사합니다.

+0

내 질문의 전반적인 내용에 대해 사과드립니다. 그러나 문제는 완전히 설명하기가 어렵습니다. 그러나, 나는 set-based 대 커서 접근법을 사용하여이 문제를 해결했다! 많은 작업이 필요했지만이 논리를 구현하기 위해 WHILE 루프를 반복 할 수있었습니다. – salvationishere

2

SQL에서 JOIN이라고합니다. 즉

SELECT * FROM table AS a JOIN table AS b; 

a | b | 4.5 | a | b | 4.5 
a | b | 4.5 | c | d | 3.694 
c | d | 3.694 | a | b | 4.5 
c | d | 3.694 | c | d | 3.694 

이제 [그룹 모드] 기록의 모든 조합이

결과 문을. Google의 JOIN에 대해 자세히 알아보십시오.

+0

팁 주셔서 감사합니다! – salvationishere

관련 문제