日期:2014-05-17  浏览次数:20461 次

求SQL语句或解决问题的方法
T1:字段 xm(姓名),zb(所在销售组),sscp(销售部品),sl(销售数量),je(单价金额)
表内数据有 :李明,苏州,产品1,50,80 
李明,苏州,产品2,60,40
李明,苏州,产品3,70,100
王歆与,广东,产品1,90,80
王歆与,广东,产品2,100,40
王歆与,广东,产品3,120,100
张可,广东,产品1,14,80
张可,广东,产品2,67,40
张可,广东,产品3,55,100
李一天,苏州,产品1,45,80
李一天,苏州,产品2,34,40
李一天,苏州,产品3,22,100

希望查询结果如下
姓名 产品1 公司排名 小组排名 产品2 公司排名 小组排名 产品3 公司排名 小组排名 总销售金额 公司排名 小组排名
李明 50 1 60 3 1 70 2 1 13400 2 1
王歆与 90 1 1 100 1 1 120 1 1 23200 1 1
张可 14 4 2 67 2 2 55 3 2 9300 3 2
李一天 45 3 2 34 4 2 22 4 2 7160 4 2
SQL?

------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-11-06 10:58:35
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[T1]
if object_id('[T1]') is not null drop table [T1]
go 
create table [T1]([xm] varchar(6),[zb] varchar(4),[sscp] varchar(5),[sl] int,[je] int)
insert [T1]
select '李明','苏州','产品1',50,80 union all
select '李明','苏州','产品2',60,40 union all
select '李明','苏州','产品3',70,100 union all
select '王歆与','广东','产品1',90,80 union all
select '王歆与','广东','产品2',100,40 union all
select '王歆与','广东','产品3',120,100 union all
select '张可','广东','产品1',14,80 union all
select '张可','广东','产品2',67,40 union all
select '张可','广东','产品3',55,100 union all
select '李一天','苏州','产品1',45,80 union all
select '李一天','苏州','产品2',34,40 union all
select '李一天','苏州','产品3',22,100
--------------开始查询--------------------------




declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename(sscp)+'=max(case when [sscp]='+quotename(sscp,'''')+' then [sl] else 0 end)'
+','+quotename('rankCompany')+'=max(case when [sscp]='+quotename(sscp,'''')+' then [rankCompany] else 0 end)'
+','+quotename('rankGroup')+'=max(case when [sscp]='+quotename(sscp,'''')+'  then [rankGroup] else 0 end)'
from (
select * ,rank()OVER(PARTITION BY sscp ORDER BY sl desc ) [rankCompany],RANK()OVER(PARTITION BY zb ORDER BY sl)[rankGroup],(SELECT&nbs