2012-08-27 3 views
0

이 테이블에 대한 읽기 전용 액세스 권한이 있으며 부품 번호 당 이미지 레코드 수에 따라 부품 번호 레코드 수를 나열하는 쿼리를 작성해야합니다. 1 개 이미지와 부품의 개수 | | 2 개 이미지와 부품의 개수 | ...이 조합 쿼리의 결과를 피벗 팅합니까?

이 VendorXYZ | 250 | 307

내가 만든

vendor_desc이 : 기본적으로, 나는 결과는 다음과 같이 포맷해야 하나의 열에 결과를 나열하지만 이미지 개수로 열을 구분해야하는이 조합 쿼리. 다음은 내 연합 검색어입니다.

SELECT vnd.vendor_desc, 
     Count(img1.[part#]) part 
FROM [mytable].[dbo].[parts_images] AS img1 
     INNER JOIN mytable.dbo.vendors AS vnd 
       ON vnd.vendor_id = LEFT(img1.part#, 3) 
     INNER JOIN (SELECT img2.part#, 
          Count(img2.image_file)images 
        FROM [mytable].[dbo].[parts_images] AS img2 
        GROUP BY img2.part# 
        HAVING (Count(img2.image_file) = 1)) AS img2 
       ON img1.part# = img2.part# 
GROUP BY vendor_desc 

UNION 

SELECT vnd.vendor_desc, 
     Count(img1.[part#]) part 
FROM [mytable].[dbo].[parts_images] AS img1 
     INNER JOIN mytable.dbo.vendors AS vnd 
       ON vnd.vendor_id = LEFT(img1.part#, 3) 
     INNER JOIN (SELECT img2.part#, 
          Count(img2.image_file)images 
        FROM [mytable].[dbo].[parts_images] AS img2 
        GROUP BY img2.part# 
        HAVING (Count(img2.image_file) = 2)) AS img2 
       ON img1.part# = img2.part# 
GROUP BY vendor_desc 
ORDER BY vendor_desc 

미리 감사드립니다. 당신의 도움에 대한

SELECT vnd.vendor_desc, 
     Count(img2.[part#]) part 
     ,COUNT(img3.part#) 
FROM mytable.[dbo].[parts_images] AS img1 
     INNER JOIN mytable.dbo.vendors AS vnd 
       ON vnd.vendor_id = LEFT(img1.part#, 3) 
     left JOIN (SELECT img2.part#, 
          Count(img2.image_file)images 
        FROM mytable.[dbo].[parts_images] AS img2 
        GROUP BY img2.part# 
        HAVING (Count(img2.image_file) = 1)) AS img2 
       ON img1.part# = img2.part# 
       left JOIN (SELECT img3.part#, 
          Count(img3.image_file)images 
        FROM mytable.[dbo].[parts_images] AS img3 
        GROUP BY img3.part# 
        HAVING (Count(img3.image_file) = 2)) AS img3 
       ON img1.part# = img3.part# 
GROUP BY vendor_desc 
order by vendor_desc 

감사합니다, podiluska :

여기에 내가 찾던 그 결과에 대한 쿼리입니다!

답변

1

그래서

SELECT * 
FROM (yourunionquery) src 
PIVOT 
(COUNT(vendor_desc) FOR part IN ([1],[2],[3], ...)) p 

당신이 컬럼의 변수 번호가 필요하면, 당신은 ... 결과 열

+0

네를 채우는 동적 SQL을 사용하여이 쿼리를 구성해야합니다 그렇게 잡은 나의 코멘트를 제거 . 이제 또 다른 질문이 있습니다 ...이 결과는 하나의 레코드 만 반환합니다. 결과가 각 vendor_desc를 반환하려면 – user955289

+1

는'COUNT (vendor_desc) '대신'COUNT (part)'를 사용하십시오. – podiluska

+0

Ok ... vendor_desc를 반환 할 수 있었지만 결과가 잘못되었습니다. 대부분의 레코드는 0을 반환합니다. 올바른 방향으로 향하고있는 것처럼 보입니다. 조금만 조정하면됩니다. – user955289

관련 문제