ExchId Currency ToCurrency CurrencyRate Month
1       HK      USD          0.78       3 2009
2       HK      RMB          0.85       3 2009
3       HK      RMB          0.86       4 2009
4       HK      TWD          0.55       2 2009
5       HK      MYA          0.66       1 2009
6       USD     HK           0.33       2 2009
7       USD     USD          1          3 2009
8       USD     RMB          0.55       3 2009
9       USD     TWD          0.66       3 2009
10      MYA     HK           0.15       7 2008
11      MYA     USD          0.88       7 2008
12      MYA     SDG          0.77       8 2008
13      MYA     RMB          0.99       8 2008
我要求变成这样一种交叉报表 
CountryCurrency  Month  USD   HK        RMB   TWD      MYA     SDG
HK               3 2009 0.78  1         0.85   0       0         0
HK               4 2009 0     1         0.86   0       0         0
HK               2 2009 0     1         0      0.55    0         0
USD              2 2009 1     0.33      0      0       0         0
USD              3 2009 1     0         0.55   0.66    0         0
MYA              7 2008 0.88  0.15      0      0       1         0
MYA              8 2008 0     0         0.99   0       1         0.77 请教各位如何实现? 谢谢了!

解决方案 »

  1.   

    ---------------------------------
    --  Author: liangCK 小梁
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (ExchId INT,Currency VARCHAR(3),ToCurrency VARCHAR(3),CurrencyRate NUMERIC(3,2),Month VARCHAR(6))
    INSERT INTO @T
    SELECT 1,'HK','USD',0.78,'3_2009' UNION ALL
    SELECT 2,'HK','RMB',0.85,'3_2009' UNION ALL
    SELECT 3,'HK','RMB',0.86,'4_2009' UNION ALL
    SELECT 4,'HK','TWD',0.55,'2_2009' UNION ALL
    SELECT 5,'HK','MYA',0.66,'1_2009' UNION ALL
    SELECT 6,'USD','HK',0.33,'2_2009' UNION ALL
    SELECT 7,'USD','USD',1,'3_2009' UNION ALL
    SELECT 8,'USD','RMB',0.55,'3_2009' UNION ALL
    SELECT 9,'USD','TWD',0.66,'3_2009' UNION ALL
    SELECT 10,'MYA','HK',0.15,'7_2008' UNION ALL
    SELECT 11,'MYA','USD',0.88,'7_2008' UNION ALL
    SELECT 12,'MYA','SDG',0.77,'8_2008' UNION ALL
    SELECT 13,'MYA','RMB',0.99,'8_2008'--SQL查询如下:SELECT 
        Currency,
        Month,
        ISNULL(USD,0) AS USD,
        ISNULL(HK,0) AS HK,
        ISNULL(RMB,0) AS RMB,
        ISNULL(TWD,0) AS TWD,
        ISNULL(MYA,0) AS MYA,
        ISNULL(SDG,0) AS SDG
    FROM (
        SELECT Currency,ToCurrency,CurrencyRate,Month
        FROM @T
    ) AS A
    PIVOT(
        SUM(CurrencyRate) FOR ToCurrency IN(USD,HK,RMB,TWD,MYA,SDG)
    ) AS pvt
    ORDER BY Currency,Month/*
    Currency Month  USD                                     HK                                      RMB                                     TWD                                     MYA                                     SDG
    -------- ------ --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
    HK       1_2009 0.00                                    0.00                                    0.00                                    0.00                                    0.66                                    0.00
    HK       2_2009 0.00                                    0.00                                    0.00                                    0.55                                    0.00                                    0.00
    HK       3_2009 0.78                                    0.00                                    0.85                                    0.00                                    0.00                                    0.00
    HK       4_2009 0.00                                    0.00                                    0.86                                    0.00                                    0.00                                    0.00
    MYA      7_2008 0.88                                    0.15                                    0.00                                    0.00                                    0.00                                    0.00
    MYA      8_2008 0.00                                    0.00                                    0.99                                    0.00                                    0.00                                    0.77
    USD      2_2009 0.00                                    0.33                                    0.00                                    0.00                                    0.00                                    0.00
    USD      3_2009 1.00                                    0.00                                    0.55                                    0.66                                    0.00                                    0.00(8 行受影响)
    */
      

  2.   

    create TABLE #1 (ExchId INT,Currency VARCHAR(3),ToCurrency VARCHAR(3),CurrencyRate NUMERIC(3,2),Month VARCHAR(6))
    INSERT INTO #1
    SELECT 1,'HK','USD',0.78,'3_2009' UNION ALL
    SELECT 2,'HK','RMB',0.85,'3_2009' UNION ALL
    SELECT 3,'HK','RMB',0.86,'4_2009' UNION ALL
    SELECT 4,'HK','TWD',0.55,'2_2009' UNION ALL
    SELECT 5,'HK','MYA',0.66,'1_2009' UNION ALL
    SELECT 6,'USD','HK',0.33,'2_2009' UNION ALL
    SELECT 7,'USD','USD',1,'3_2009' UNION ALL
    SELECT 8,'USD','RMB',0.55,'3_2009' UNION ALL
    SELECT 9,'USD','TWD',0.66,'3_2009' UNION ALL
    SELECT 10,'MYA','HK',0.15,'7_2008' UNION ALL
    SELECT 11,'MYA','USD',0.88,'7_2008' UNION ALL
    SELECT 12,'MYA','SDG',0.77,'8_2008' UNION ALL
    SELECT 13,'MYA','RMB',0.99,'8_2008'
    go
    select Currency as CountryCurrency,Month
    ,MAX( case when Currency = 'USD' then 1 when ToCurrency = 'USD' then CurrencyRate else 0 end) USD
    ,MAX( case when Currency = 'HK' then 1 when ToCurrency = 'HK' then CurrencyRate else 0 end) HK
    ,MAX( case when Currency = 'RMB' then 1 when ToCurrency = 'RMB' then CurrencyRate else 0 end) RMB
    ,MAX( case when Currency = 'TWD' then 1 when ToCurrency = 'TWD' then CurrencyRate else 0 end) TWD
    ,MAX( case when Currency = 'MYA' then 1 when ToCurrency = 'MYA' then CurrencyRate else 0 end) MYA
    ,MAX( case when Currency = 'SDG' then 1 when ToCurrency = 'SDG' then CurrencyRate else 0 end) SDG
    from  #1
    group by Currency,Month
    order by Currency,Month 
    /*
    CountryCurrency Month  USD                                     HK                                      RMB                                     TWD                                     MYA                                     SDG
    --------------- ------ --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
    HK              1_2009 0.00                                    1.00                                    0.00                                    0.00                                    0.66                                    0.00
    HK              2_2009 0.00                                    1.00                                    0.00                                    0.55                                    0.00                                    0.00
    HK              3_2009 0.78                                    1.00                                    0.85                                    0.00                                    0.00                                    0.00
    HK              4_2009 0.00                                    1.00                                    0.86                                    0.00                                    0.00                                    0.00
    MYA             7_2008 0.88                                    0.15                                    0.00                                    0.00                                    1.00                                    0.00
    MYA             8_2008 0.00                                    0.00                                    0.99                                    0.00                                    1.00                                    0.77
    USD             2_2009 1.00                                    0.33                                    0.00                                    0.00                                    0.00                                    0.00
    USD             3_2009 1.00                                    0.00                                    0.55                                    0.66                                    0.00                                    0.00(8 row(s) affected)
    */
      

  3.   

    declare @sql varchar(8000)
    select @sql='select Currency ,Month '
    select @sql=@sql+',sum( case ToCurrency  when '''+ToCurrency+ ''' then CurrencyRate else 0 end) as '+  ToCurrency  from tb group by ToCurrency
    select @sql=@sql+' from tb group by Currency ,Month'
    exec(@sql)
      

  4.   


    动态语句declare @sql varchar(max)
    set @sql = 'select Currency as CountryCurrency,Month '
    select @sql = @sql + ',Max(case when Currency = '''+ToCurrency+''' then 1 when ToCurrency = '''+ToCurrency+''' then CurrencyRate else 0 end) '+ToCurrency from 
    (select distinct ToCurrency from #1)t
    set @sql = @sql +' from  #1 group by Currency,Month order by Currency,Month '
    exec(@sql)/*
    CountryCurrency Month  USD                                     HK                                      RMB                                     TWD                                     MYA                                     SDG
    --------------- ------ --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
    HK              1_2009 0.00                                    1.00                                    0.00                                    0.00                                    0.66                                    0.00
    HK              2_2009 0.00                                    1.00                                    0.00                                    0.55                                    0.00                                    0.00
    HK              3_2009 0.78                                    1.00                                    0.85                                    0.00                                    0.00                                    0.00
    HK              4_2009 0.00                                    1.00                                    0.86                                    0.00                                    0.00                                    0.00
    MYA             7_2008 0.88                                    0.15                                    0.00                                    0.00                                    1.00                                    0.00
    MYA             8_2008 0.00                                    0.00                                    0.99                                    0.00                                    1.00                                    0.77
    USD             2_2009 1.00                                    0.33                                    0.00                                    0.00                                    0.00                                    0.00
    USD             3_2009 1.00                                    0.00                                    0.55                                    0.66                                    0.00                                    0.00(8 row(s) affected)*/
      

  5.   

    DECLARE @T TABLE (ExchId INT,Currency VARCHAR(3),ToCurrency VARCHAR(3),CurrencyRate NUMERIC(3,2),Month VARCHAR(6))
    INSERT INTO @T
    SELECT 1,'HK','USD',0.78,'3_2009' UNION ALL
    SELECT 2,'HK','RMB',0.85,'3_2009' UNION ALL
    SELECT 3,'HK','RMB',0.86,'4_2009' UNION ALL
    SELECT 4,'HK','TWD',0.55,'2_2009' UNION ALL
    SELECT 5,'HK','MYA',0.66,'1_2009' UNION ALL
    SELECT 6,'USD','HK',0.33,'2_2009' UNION ALL
    SELECT 7,'USD','USD',1,'3_2009' UNION ALL
    SELECT 8,'USD','RMB',0.55,'3_2009' UNION ALL
    SELECT 9,'USD','TWD',0.66,'3_2009' UNION ALL
    SELECT 10,'MYA','HK',0.15,'7_2008' UNION ALL
    SELECT 11,'MYA','USD',0.88,'7_2008' UNION ALL
    SELECT 12,'MYA','SDG',0.77,'8_2008' UNION ALL
    SELECT 13,'MYA','RMB',0.99,'8_2008'--SQL查询如下:SELECT 
        Currency,
        Month,
        ISNULL(USD,0) AS USD,
        ISNULL(HK,0) AS HK,
        ISNULL(RMB,0) AS RMB,
        ISNULL(TWD,0) AS TWD,
        ISNULL(MYA,0) AS MYA,
        ISNULL(SDG,0) AS SDG
    FROM (
        SELECT Currency,ToCurrency,CurrencyRate,Month
        FROM @T
    ) AS A
    PIVOT(
        SUM(CurrencyRate) FOR ToCurrency IN(USD,HK,RMB,TWD,MYA,SDG)
    ) AS pvt
    ORDER BY Currency,Month