2013-04-06 3 views
1

많은 비슷한 항목을 검색했지만 아직 작동하지 않으려 고합니다. 몇 가지 테이블 조인을 한 후에 특히 하나의 열을 그룹화하려고합니다. 어떤 도움이 크게 감사합니다 바램SQL Server - 여러 조인과 문자열을 사용한 그룹화

OUTPUT 오늘

Account System System Plan Code Account Plan Code Request 
12345 Sys1 Sys1 P1   12345 P1   00001 
12345 Sys1 Sys1 P2   NULL  NULL  NULL 
12345 Sys2 Sys2 P3   12345 P3   00002 
34567 Sys1 Sys1 P1   NULL  NULL  NULL 
34567 Sys1 Sys1 P2   34567 P2   00003 
45678 Sys3 Sys3 P4   NULL  NULL  NULL 

원하는 출력

Account System System Plan Code Account Plan Code Request 
12345 Sys1 Sys1 P1   12345 P1, P2  00001 
12345 Sys2 Sys2 P3   12345 P3   00002 
34567 Sys1 Sys1 P2   34567 P1,P2  00003 
45678 Sys3 Sys3 P4   NULL NULL  NULL 

나는 몇 테이블을 조인하고 있는데 시스템에 각각의 고유 한 계정 당 하나의 행으로 계획 코드를 결합하려는 매핑.

  • TAB1 = 계정 및 시스템
  • TAB2 = 시스템 및 계획 코드 (어떤 계획 코드 쇼는 각 시스템에 관련되는 매핑)
  • tab3에 = 계정, 계획 코드, 요청 #

GROUP BY 한 열을 사용하여 GROUP BY식이 아닌 오류가 발생하여 그룹이 손실됩니다. 그럼 모든 열을 포함하고 출력을 전혀 변경하지 않습니다.

SELECT  A.ACCOUNT, A.SYSTEM, B.SYSTEM, B.PCODE, C.ACCOUNT, C.PCODE, C.REQUEST 
FROM  MYDB.TAB1 A 
LEFT JOIN MYDB.TAB2 B 
ON  A.SYSTEM = B.SYSTEM 
LEFT JOIN MYDB.TAB3 C 
ON  A.ACCOUNT = C.ACCOUNT AND B.PCODE = C.PCODE 
WHERE  A.ACCOUNT IS NOT NULL 
ORDER BY A.ACCOUNT 
+0

실제 출력의 열 수가 표시된 쿼리와 일치하지 않습니다. 출력을 생성 한 실제 쿼리를 게시 할 수 있습니까? –

+0

실제 쿼리 인 출력을 업데이트 할 것입니다. 일부는 중복 된 이후로 내가 신경을 쓰는 열에만 초점을 맞춘 출력 미리보기를 입력했습니다. 나는 그것을 지금 명백하게 새롭게 할 것이다. 그것을 보아 주셔서 고마워요 – Yume

+0

여기서 주요 도전은 '계획 코드'를 연결하는 것입니다. 왜냐하면 MS SQL Server에는 'GROUP_CONCAT'과 직접적인 유사점이 없기 때문입니다. 나머지는 사소한 것처럼 보인다. –

답변

1

당신이 계획을 연결할 필요가없는 경우 다음 GROUP BY 구현은 사용자의 요구에 맞게 수 있다면, 다음을 참조하십시오. 이 스크립트의 여러 열을 제거했습니다. 집계 쿼리 제한을 준수하기 위해 나는 C.PCODE (일 수도 있음)과 MAX (C.REQUEST)을 사용하여 NULL을 제거하는 것이 좋습니다.

SELECT  A.ACCOUNT, A.SYSTEM, MAX(C.PCODE), MAX(C.REQUEST) 
FROM  MYDB.TAB1 A 
LEFT JOIN MYDB.TAB2 B 
ON  A.SYSTEM = B.SYSTEM 
LEFT JOIN MYDB.TAB3 C 
ON  A.ACCOUNT = C.ACCOUNT AND B.PCODE = C.PCODE 
WHERE  A.ACCOUNT IS NOT NULL 
GROUP BY A.ACCOUNT, A.SYSTEM 
ORDER BY A.ACCOUNT 
+0

이것은 트릭을 수행하는 것 같습니다. PM 77-1이 핵심 요구 사항을 충족시키는 데 도움을 주셔서 감사합니다. – Yume

관련 문제