2012-06-17 3 views
1

테이블이 두 개인 경우 장난감이 하나 뿐인 장난감의 경우 additionalcolors을 보여줄 필요가 있습니다. 예 (FW18, FK97, FK38, LX74). Toytypes에서 Toyadditionalcolor까지의 왼쪽 외부 조인을 사용했으며 하위 쿼리를 수행하여 toyname 만 가진 toypattern을 찾았습니다. 그러나 나는 여전히 아래의 결과 쿼리와 같은 결과를 얻을 수 없습니다.왼쪽 쿼리에서 SQL 쿼리 문제가 발생했습니다.

아래의 query1 표와 비슷한 결과를 얻으려면 수정해야 할 부분을 알려주십시오.

ToyTypes

ToyPattern ToyName   mainColor 
---------- --------------- --------- 
    F692   Dino    pink  
    F692   Elephant   pink   
    FK38   Elephant   pink   
    FK97   Giraffe   purple  
    FW18   Sonic   pink  
    LX73   Kangaroo   pink  
    LX73   Cow    blush  
    LX73   Dog    pink  
    LX74   Cat    plum   

ToyAdditionalColor

ToyPattern ToyName  firstColor additionalColor 
---------- ---------- ----------- ---------------- 
    FK38  Elephant pink   orange 
    FK38  Elephant pink   yellow 
    LX74  cat   plum   dark pink 
    LX74  cat   plum   pale pink 

원하는 출력 : 여기 아래

ToyPattern ToyName  color 1  color 2  color 3  color 4  color 5  
----------- ---------- ------------ ------------ ------------ ------------ ------------ 
FK38  Elephant pink   orange  yellow  NULL   NULL  
FK97  Giraffe  purple  NULL   NULL   NULL   NULL 
FW18  Sonic  pink   NULL   NULL   NULL   NULL 
LX74  cat   plum   dark pink pale pink NULL   NULL 

내 SQL 코드입니다. ToyPattern, ToyName, 색상, SORTORDER :

select distinct 
    toytypes.toypattern, 
    toyname, 
    toytypes.flowerBreed, 
    toytypes.firstColor as 'color 1' 
from 
    Toytypes 
left join 
    ToyAdditionalColor on ToyAdditionalColor.toypattern = Toytypes.toypattern 
where 
    toytypes.toypattern in 
       (select Toypattern 
       from Toytypes 
       group by toypattern 
       having count(toypattern) < 2) 

답변

0

흠 내가 좋아하는 뭔가가 될 ToyAdditionalColor를 정상화하여 시작 선호하는 것입니다.

데이터 예는 다음과 같습니다 'FK38', '코끼리', '핑크', 1

두 번째 행 : 'FK38', '코끼리', '오렌지', 2

후 그

SELECT 
    ToyPattern 
    , ToyName 
    , 'color 1' = 1 
    , 'color 2' = 2 
    , 'color 3' = 3 
    , 'color 4' = 4 
    , 'color 5' = 5 
FROM ( 
    SELECT 
    ToyPattern 
    , ToyName 
    , SortOrder 
    , Color 
    FROM 
    dbo.ToyAdditionalColor 
) AS ToyAdditionalColor PIVOT (
    MAX (Color) FOR SortOrder IN (1,2,3,4,5) 
) AS PivotTable 
+0

안녕 YS, 지금 우리는 정상화를 수행하는 가정하지 않을 수있는 문제를 : 나는 순간에 나와 함께 Management Studio를 가지고하지 않은,하지만 나는 그것이 같을 수 있습니다 생각 - 당신은 PIVOT 사용할 수 있습니다. 예, 테이블은 정규화되지 않았습니다. 우리는 위의 테이블을 사용하여 쿼리를 수행하고 desir과 동일한 결과를 얻습니다. 에드 출력. – setiasetia

+0

하지만이 질문에 대한 표를 정규화하지 않았기 때문에 ... – setiasetia

+0

힌트를 보내 주셔서 감사합니다. 나는 이미 개념을 얻은 것 같아. 고마워! – setiasetia

관련 문제