2010-03-10 2 views
0

두 개의 테이블이 있는데, 간략하게하기 위해 TableA와 TableB라고합니다.SQL Server - 열에 마스터 세부 정보 데이터를 표시하는 방법

TableA 
ID – int 
Name varchar(50) 

TableB 
ID – int 
TableA_Fk – int 
Value varchar(50) 

이 테이블 A의 각 레코드 내가 원주 형태로 데이터를 검색 할 수 있도록하려는 테이블 B. 대부분 9 개 기록을 가질 수 있습니다 :

TableA-Name, TableB-Value1, … TableB-Value9 

이인가이 스키마입니다 가능한 쿼리 사용? 감사! 당신은 LEFT 필요합니다

+0

TABLE_B에 id, table_a_fk 및 value와 같은 세 개의 열만있는 경우 각 table_a 레코드에 대해 9 개의 열만 가져올 수 있다는 것을 어떻게 알 수 있습니까? –

+0

도메인 모델과 상황에 따라 달라질 수 있습니다. 조가 여기서 그걸 짧게 만들었다는 것을 잊지 마라. =) –

답변

0

은 가입 및 피벗 테이블

0

당신은 같은 것을 할 수있는 :

SELECT rank() OVER (ORDER BY tableA_FK) as rank, tableA_fk, value 
INTO #temp 
FROM TableB b 
ORDER BY rank 


SELECT a.Name, 
     CASE WHEN t.rank = 1 THEN t.Value ELSE NULL END AS TableB-Value1, 
     CASE WHEN t.rank = 2 THEN t.Value ELSE NULL END AS TableB-Value2, 
     CASE WHEN t.rank = 3 THEN t.Value ELSE NULL END AS TableB-Value3, 
     .... (etc.) 
FROM TableA a 
INNER JOIN #temp t ON a.Id = t.tableA_fk 

이는 SQL Server 2005 또는 위로를 필요로합니다. 죄송합니다. 그러나 SQL Server (또는 시간)를 사용하지 않아도이 문제를 테스트 할 수 있습니다. 희망이 당신에게 아이디어를 제공하고 도움이됩니다.

+0

ORDER가 아닌 fk로 파티션을 나누고 싶습니다. –

0

DBRM과 무관하게이 작업을 수행해야합니다.

SELECT A.Name 
    , SUM(CASE WHEN B.Value = 1 THEN 1 ELSE NULL END) AS B_Value_1 
    , SUM(CASE WHEN B.Value = 2 THEN 2 ELSE NULL END) AS B_Value_2 
    , SUM(CASE WHEN B.Value = 3 THEN 3 ELSE NULL END) AS B_Value_3 
    , SUM(CASE WHEN B.Value = 4 THEN 4 ELSE NULL END) AS B_Value_4 
    , SUM(CASE WHEN B.Value = 5 THEN 5 ELSE NULL END) AS B_Value_5 
    , SUM(CASE WHEN B.Value = 6 THEN 6 ELSE NULL END) AS B_Value_6 
    , SUM(CASE WHEN B.Value = 7 THEN 7 ELSE NULL END) AS B_Value_7 
    , SUM(CASE WHEN B.Value = 8 THEN 8 ELSE NULL END) AS B_Value_8 
    , SUM(CASE WHEN B.Value = 9 THEN 9 ELSE NULL END) AS B_Value_9 
FROM A 
    INNER JOIN B ON B.TableA_FK = A.ID 
GROUP BY A.Name 
ORDER BY A.Name 
관련 문제