2010-02-19 2 views
4

나는 다음과 같은 SQL 쿼리를 가지고 :Microsoft SQL Server에서 PIVOT과 내부 조인을 결합 할 수 있습니까?

SELECT CountryID, [10201] AS CountryGDPPerCapita, [10677] AS LifeExpTotal 
FROM 
(
    SELECT CountryID,FieldID,numeric 
    FROM globaledge.dbo.DIBS_Data 
    WHERE CountryID IN (3,5) 
    AND FieldID IN (10201,10677) 
    AND year = 2002 
) SourceTable 
PIVOT 
(
    MAX(numeric) 
    FOR FieldID IN ([10201],[10677]) 
) AS PivotTable 
ORDER BY PivotTable.CountryID 

이는 다음과 같습니다 뭔가 반환

CountryID CountryGDPPerCapita LifeExpTotal 그런

3 35985.78 77.24

5 9147.7 74.54

다음과 같은 다른 쿼리가 있습니다 :

SELECT CountryName, CountryGDP, CountryGDPGrowth 
FROM globaledge.dbo.Country_Statistics 
WHERE CountryID IN (3,5) 
AND year=2002 
Order By CountryName 

다음과 같은 생산 :

COUNTRYNAME CountryGDP CountryGDPGrowth

멕시코 1567000000000000 1.3

미국 14440000000000000 또한 0.4

참조하는 것이, 내가 두 테이블에 CountryID을 수행주의 같은 나라에.

COUNTRYNAME CountryGDP CountryGDPGrowth CountryGDPPerCapita LifeExpTotal

멕시코 156700000000000000 1.3 35985.78 77.24

미국 144400000000000000 0.4 9147.7 74.54 : 내가 원하는 다음을 반환 어쩌면 내부 조인 한 SQL 쿼리, 생성하는 것입니다

누구든지이 쿼리를 작성할 수 있습니까? 가능하면 알려주시겠습니까?

답변

11

이런 식으로 뭔가가 작동합니다 :

SELECT 
    a.CountryID, a.CountryName, a.CountryGDP, a.CountryGDPGrowth 
, b.CountryGDPPerCapita, b.LifeExpTotal 
FROM 
(
    SELECT CountryID, CountryName, CountryGDP, CountryGDPGrowth 
    FROM globaledge.dbo.Country_Statistics 
    WHERE CountryID IN (3,5) 
    AND year=2002 
) AS a 
JOIN 
(
    SELECT CountryID, [10201] AS CountryGDPPerCapita, [10677] AS LifeExpTotal 
    FROM 
    (
     SELECT CountryID,FieldID,numeric 
     FROM globaledge.dbo.DIBS_Data 
     WHERE CountryID IN (3,5) 
     AND FieldID IN (10201,10677) 
     AND year = 2002 
    ) SourceTable 
    PIVOT 
    (
     MAX(numeric) 
     FOR FieldID IN ([10201],[10677]) 
    ) AS PivotTable 
) AS b ON a.CountryID = b.CountryID 
Order By a.CountryName 
관련 문제