这个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 [品牌],销售人员')
/*
品牌 销售人员 a a a a a a
-------------------------------------------------- -------------------------------------------------- ----------- ----------- ----------- ----------- ----------- -----------
皮卡 小李 1 1 0 0 0 0
轻卡 小李 0 0 2 2 1 1
皮卡 小王 3 3 0 0 0 0
轻卡 小王 0 0 0 0 1 1
*/