여기 게시 한 첫 번째 질문이므로 의도하지 않은 실수를 용서할 수 있습니다.SQL Server에서 집계되지 않은 데이터를 "피벗"
필자는 현재 커다란 정규화되지 않은 테이블을 가져 와서 4 개의 별도의 정규화 된 테이블로 나누었다. 이 보드에 대한 최종 목표는 이전 버전과의 호환성을 위해 정규화되지 않은 테이블을 모방 한 뷰를 만드는 것입니다.
내 시나리오의 단순화 된 스냅 샷, 내가 두 테이블에서 거짓말을 할 노력하고있어의 핵심 제공한다 : 그래서 나는 다음과 같은 쿼리를 실행하면ASSOC_ROLE ASSOCIATE
---------- ----------
assoc_id (fk) assoc_id (pk)
role_id (fk) last_name
org_nbr (fk)
을 ...
SELECT Assoc_Role.org_nbr, Assoc_Role.assoc_id, Associate.last_name, Assoc_Role.role_id
FROM Assoc_Role INNER JOIN
Associate ON Assoc_Role.assoc_id = Associate.assoc_id
WHERE Assoc_Role.org_nbr = '1AA'
... 나는 다음과 같은 결과가 궁극적으로 내가 같이 보일 것이다 구축하고자하는 뷰를
org_nbr assoc_id last_name role_id
------- -------- --------- -------
1AA 1447 Cooper 1
1AA 1448 Collins 3
1AA 1448 Collins 4
1AA 1448 Collins 5
1AA 1449 Lynch 6
을 설정할 수 :
org_nbr role1_ID role1_name role2_ID role2_name role3_ID role3_name role4_ID role4_name role5_ID role5_name role6_ID role6_name
------- -------- ---------- -------- ---------- -------- ---------- -------- ---------- -------- ---------- -------- ----------
1AA 1447 Cooper NULL NULL 1448 Collins 1448 Collins 1448 Collins 1449 Lynch
내 초기 생각은 PIVOT 명령을 사용하려고했지만, 나의 이해는 PIVOT은 집계의 어떤 종류를 필요로하고, 그 내 시나리오에 적합하지 않습니다. 또한 SELECT 절에서 CASE 명령을 사용하여 연주했지만 내 결과 집합을 하나의 레코드로 축소하지는 않습니다.
누군가가이 작업을 수행 할 수있는 방법을 밝힐 수 있기를 바랍니다. 누구에게 더 많은 정보가 필요한지 알려주세요. 감사!
스코틀랜드
흥미 롭습니다 ... 나는이 고급 수준에서 SQL 쿼리를 작성하는 것에 매우 익숙하므로 연속적으로 자체 테이블에 가입하는 것을 생각하지 않았지만 이것이 어떻게 작동하는지 명확하게 볼 수 있습니다. 내 다음 과제는 이것을 더 큰 쿼리에 통합하는 것이지만 이것은 나에게 훌륭한 출발점을 제공한다. 감사합니다. 하나의 질문에 관해서는 : "물론 이것은 최대 role_id가 증가하면 짧아 질 것입니다 ..." 더 많은 role_ID를 추가하면 해당 롤에 대해 설명해야합니다. 쿼리, 아니면 그 이상의 제안입니까? – ScottieByNature
@ScottieByNature 최대 'role_ID'가 증가하면 두 가지 옵션이 있습니다. 변경 사항이 "최대 6 개 였지만 현재는 최대 9 개"라는 줄을 따라 가면 명확한 방법으로 쿼리에 쿼리를 추가해야합니다. 그러나 "이제는 임의의 수의 가능한 역할이있을 것"이라면 다른 접근 방식을 찾아야합니다.이 경우에는 @Chris Lively의 고려 사항이 적용되며 SQL 외부에서 수행하거나 동적 SQL, 또는 완전히 다른 것 - 당신은 여기에 와서 물어볼 수있다 : – AakashM
Understood ... 많이 감사! – ScottieByNature