代码之家  ›  专栏  ›  技术社区  ›  adhanlon

我可以在Microsoft SQL Server中将透视与内部联接结合起来吗?

  •  4
  • adhanlon  · 技术社区  · 16 年前

    我有以下SQL查询:

    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 CountryG人均生活支出总额

    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
    

    产生以下结果:

    国家名称国家GDP国家GDP增长

    墨西哥15670000000000 1.3

    美国1444000000000000 0.4

    另外请注意,两个表中的CountryID都是指同一个国家。我想要的是创建一个SQL查询,可能带有一个内部联接,它将返回以下内容:

    countryname countrygdp countrygdpgrowth countrygdpper capital lifeexptotal

    墨西哥1567000000000000 1.3 35985.78 77.24

    美国14440000000000000000 0.4 9147.7 74.54

    有人能帮我问这个问题吗?或者告诉我有没有可能?

    1 回复  |  直到 16 年前
        1
  •  11
  •   Peter Radocchia    16 年前

    类似这样的方法会奏效:

    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