>

테이블 T1이 있습니다

ID  X  Y  ProtocolID
 1  4  2         100
 2  9  0         101
 3  5  1         104

테이블 T2

ID  Entry  Category  ProtocolID
 1  "XYZ"       700         100
 2  "ABC"       701         100
 3  "UZT"       702         100
 4  "TRS"       704         100
 5  "YBS"       700         101
 6  "VTX"       701         101
 7  "SAJ"       702         101
 8  "POL"       710         101
 9  "UIT"       700         104
10  "UCN"       701         104
11  "POI"       702         104  

ProtocolID 에서 테이블을 조인해야합니다   Category 와 함께 항목을 넣어   가치 700 701 702  단일 행으로. 결과 테이블은 다음과 같아야합니다.

T1.ID  X  Y  Entry700  Entry701  Entry702
    1  4  2     "XYZ"     "ABC"     "UZT"
    2  9  0     "YBS"     "VTX"     "SAJ"
    3  5  1     "UIT"     "UCN"     "POI"

  • 답변 # 1

    조인이있는 기본 피벗 쿼리는 여기에서 작동해야합니다.

    SELECT
        t1.ID,
        t1.X,
        t1.Y,
        MAX(CASE WHEN t2.Category = 700 THEN t2.Entry END) Entry700,
        MAX(CASE WHEN t2.Category = 701 THEN t2.Entry END) Entry701,
        MAX(CASE WHEN t2.Category = 702 THEN t2.Entry END) Entry702,
        MAX(CASE WHEN t2.Category = 703 THEN t2.Entry END) Entry703,
        MAX(CASE WHEN t2.Category = 704 THEN t2.Entry END) Entry704
    FROM T1 t1
    INNER JOIN T2 t2
        ON t1.ProtocolID = t2.ProtocolID
    GROUP BY
        t1.ID,
        t1.X,
        t1.Y;
    
    

  • 답변 # 2

    다음과 같이 해보십시오 :

    select t1.id, t1.x, t1.y, (select t2.entry from t2 where t1.id=t2.id and 
    t2.category=700) as entry_700  from t1
    
    

  • 답변 # 3

    작동해야합니다

    SELECT *
    FROM ( SELECT t1.id1,
               x,
               y,
               entry1,
               cat
        FROM t1,
             t2
        WHERE t1.protoid = t2.protoid )
            PIVOT ( MAX ( entry1 ) AS entry1
                FOR cat
                IN ( 700,701 )
            );
    
    

관련 자료

  • 이전 r - 웹 사이트 활동을 사용자별로 세션으로 그룹화하려면 어떻게해야합니까?
  • 다음 c# - 캔트 두 숫자 사이의 백분율 차이 계산