这样的例子已很多了,随便参考一个即可:
http://community.csdn.net/Expert/topic/3271/3271733.xml?temp=.875271
http://community.csdn.net/Expert/topic/3198/3198215.xml?temp=.7801782
...

解决方案 »

  1.   

    select 国家地区
    ,[数值(第一周)]=sum([数值(第一周)])
    ,[数值(第二周)]=sum([数值(第一周)])
    from(
    select 国家地区,[数值(第一周)]=数值,[数值(第二周)]=0
    from(
    SELECT TOP 5 国家地区, COUNT(*) AS 数值
    FROM 资信报告目录
    WHERE (地理位置 = '欧洲') AND (委托日期 >= '2004 - 08 - 01') AND 
          (委托日期 <= '2004 - 08 - 7') OR
          (地理位置 = '东欧') AND (委托日期 >= '2004 - 08 - 01') AND 
          (委托日期 <= '2004 - 08 - 7')
    GROUP BY 国家地区
    ORDER BY 数值 DESC)a
    union all
    select 国家地区,0,数值
    from(
    SELECT TOP 5 国家地区, COUNT(*) AS 数值
    FROM 资信报告目录
    WHERE (地理位置 = '欧洲') AND (委托日期 >= '2004 - 08 - 07') AND 
          (委托日期 <= '2004 - 08 - 14') OR
          (地理位置 = '东欧') AND (委托日期 >= '2004 - 08 - 07') AND 
          (委托日期 <= '2004 - 08 - 14')
    GROUP BY 国家地区
    ORDER BY 数值 DESC)a
    )b group by 国家地区
      

  2.   

    不取前5名:SELECT 国家地区, 
    sum(case when (委托日期 >= '2004-08-01') AND (委托日期 <= '2004-08-7') then 1 else 0 end) AS [数值(第一周)],
    sum(case when (委托日期 >='2004-08-07') AND (委托日期 <= '2004-08-14') then 1 else 0 end) AS [数值(第二周)],
    ...
    FROM 资信报告目录
    WHERE (地理位置 = '欧洲') AND (委托日期 >= '2004 - 08 - 01') AND 
          (委托日期 <= '2004 - 08 - 31') OR
          (地理位置 = '东欧') AND (委托日期 >= '2004 - 08 - 01') AND 
          (委托日期 <= '2004 - 08 - 31')
    GROUP BY 国家地区
    ORDER BY [数值(第一周)] DESC或者以第一周排序:SELECT top 5 国家地区, 
    sum(case when (委托日期 >= '2004-08-01') AND (委托日期 <= '2004-08-7') then 1 else 0 end) AS [数值(第一周)],
    sum(case when (委托日期 >='2004-08-07') AND (委托日期 <= '2004-08-14') then 1 else 0 end) AS [数值(第二周)],
    ...
    FROM 资信报告目录
    WHERE (地理位置 = '欧洲') AND (委托日期 >= '2004 - 08 - 01') AND 
          (委托日期 <= '2004 - 08 - 31') OR
          (地理位置 = '东欧') AND (委托日期 >= '2004 - 08 - 01') AND 
          (委托日期 <= '2004 - 08 - 31')
    GROUP BY 国家地区
    ORDER BY [数值(第一周)] DESC