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

这个sql查询应该怎么做


create table 表
(
 ID varchar(50),
 品牌 varchar(50),
 车型 varchar(50),
 销售人员 varchar(50),
 客户名 varchar(50)
)
insert into 表 values('001','轻卡','顺达','小王','甲')
insert into 表 values('002','轻卡','凯运','小李','甲')
insert into 表 values('003','皮卡','域虎','小王','甲')
insert into 表 values('004','轻卡','凯运','小李','乙')
insert into 表 values('005','皮卡','域虎','小王','甲')
insert into 表 values('006','轻卡','顺达','小李','甲')
insert into 表 values('007','皮卡','域虎','小王','丙')
insert into 表 values('008','皮卡','域虎','小李','丁')
我是这样写的:
declare @sql varchar(max)
  select @sql=isnull(@sql+',','')+'sum(Case when 车型='''+车型+''' then 1 Else 0 End) As ['+品牌+'-'+车型+'-销售(数)],Case when  车型='''+车型+''' then count(客户名) Else 0 End as ['+品牌+'-'+车型+'-客户(数)]'
  FROM 表
  GROUP BY 车型,品牌
  ORDER BY 品牌
exec('select 品牌,销售人员,'+@sql+'from 表  group by 品牌,销售人员,车型 order by 品牌,销售人员')
查不出来上面的结果,如果同一个销售员卖出了相同品牌但不同车型的两台车 需要对车型分组,但这样就会出现两条这个销售人的记录

------解决方案--------------------
列名你自己改一下吧,大概思路就这样
--create table 表
--(
-- ID varchar(50),
-- 品牌 varchar(50),
-- 车型 varchar(50),
-- 销售人员 varchar(50),
-- 客户名 varchar(50)
--)
--insert into 表 values('001','轻卡','顺达','小王','甲')
--insert into 表 values('002','轻卡','凯运','小李','甲')
--insert into 表 values('003','皮卡','域虎','小王','甲')
--insert into 表 values('004','轻卡','凯运','小李','乙')
--insert into 表 values('005','皮卡','域虎','小王','甲')
--insert into 表 values('006','轻卡','顺达','小李','甲')
--insert into 表 values('007','皮卡','域虎','小王','丙')
--insert into 表 values('008','皮卡','域虎','小李','丁')
declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename('a')+'=sum(case when [品牌]='+quotename(品牌,'''')+' and [车型]='+quotename(车型,'''')+' then 1 else 0 end)'
+','+quotename('a')+'=count(case when [品牌]='+quotename(品牌,'''')+' and [车型]='+quotename(车型,'''')+' then 客户名 else null end)'
from 表 group by 品牌,车型
exec('select [品牌],销售人员'+@s+' from 表 group by [品牌],销售人员')
 
 /*
 品牌                 &