22,294
社区成员
发帖
与我相关
我的任务
分享if object_id('tb') is not null
drop table tb
go
create table tb(产品 varchar(10),促销员 varchar(10),业务员 varchar(10),数量 int)
insert tb select '001','促销员1','业务员1', 1
insert tb select '002','促销员1','业务员1', 1
insert tb select '003','促销员1','业务员2', 1
insert tb select '001','促销员2','业务员2', 1
insert tb select '002','促销员2','业务员2', 1
insert tb select '003','促销员2','业务员1', 1
declare @s varchar(8000)
set @s='select a.产品 '
select @s=@s+',sum(case when 促销员='''+促销员+''' and 业务员='''+业务员+''' then 1 else 0 end) ['+促销员+业务员+'数量]'
from (select distinct 业务员,促销员 from tb) t
select @s=@s+' from tb a group by 产品'
exec(@s)
/*
产品 促销员1业务员1数量 促销员2业务员1数量 促销员1业务员2数量 促销员2业务员2数量
---------- ----------- ----------- ----------- -----------
001 1 0 0 1
002 1 0 0 1
003 0 1 1 0
(3 行受影响)
*/这样好看点,再慢慢改进。------------------------------------------------------------------------
-- Author: happyflystone
-- Date : 2009-04-13 21:40:31
-- Ver: Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)
-- Apr 14 2006 01:12:25
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
--
------------------------------------------------------------------------
-- Test Data: ta
IF OBJECT_ID('ta') IS NOT NULL
DROP TABLE ta
Go
CREATE TABLE ta(产品 NVARCHAR(3),促销员 NVARCHAR(4),业务员 NVARCHAR(4),数量 INT)
Go
INSERT INTO ta
SELECT '001','促销员1','业务员1',1 UNION ALL
SELECT '002','促销员1','业务员1',1 UNION ALL
SELECT '003','促销员1','业务员2',1 UNION ALL
SELECT '001','促销员2','业务员2',1 UNION ALL
SELECT '002','促销员2','业务员2',1 UNION ALL
SELECT '003','促销员2','业务员1',1
GO
--Start
declare @s varchar(1000)
select @s = isnull(@s+',','')+'[num'+cola+colb+']=max(case when 促销员= '''+cola+''' and 业务员=''' +colb+''' then 数量 else 0 end)'
from(select distinct 促销员 as cola from ta ) a
,( select distinct 业务员 as colb from ta) b
exec('select 产品,'+ @s+' from ta group by 产品')
--Result:
/*
产品 num促销员1业务员1 num促销员1业务员2 num促销员2业务员1 num促销员2业务员2
---- ----------- ----------- ----------- -----------
001 1 0 0 1
002 1 0 0 1
003 0 1 1 0
*/
--End
if object_id('tb') is not null
drop table tb
go
create table tb(产品 varchar(10),促销员 varchar(10),业务员 varchar(10),数量 int)
insert tb select '001','促销员1','业务员1', 1
insert tb select '002','促销员1','业务员1', 1
insert tb select '003','促销员1','业务员2', 1
insert tb select '001','促销员2','业务员2', 1
insert tb select '002','促销员2','业务员2', 1
insert tb select '003','促销员2','业务员1', 1
declare @s varchar(8000)
set @s='select a.产品 '
select @s=@s+',sum(case when 促销员='''+促销员+''' and 业务员='''+业务员+''' then 1 else 0 end) [数量]'
from (select distinct 业务员,促销员 from tb) t
select @s=@s+' from tb a group by 产品'
exec(@s)
/*
产品 数量 数量 数量 数量
---------- ----------- ----------- ----------- -----------
001 1 0 0 1
002 1 0 0 1
003 0 1 1 0
(3 行受影响)
*/create table tb(产品 varchar(10),促销员 varchar(10),业务员 varchar(10),数量 int)
insert tb values('001','促销员1','业务员1', 1 )
insert tb values('002','促销员1','业务员1', 1 )
insert tb values('003','促销员1','业务员2', 1 )
insert tb values('001','促销员2','业务员2', 1 )
insert tb values('002','促销员2','业务员2', 1 )
insert tb values('003','促销员2','业务员1', 1 )
select a.产品,
sum(case when 促销员='促销员1' and 业务员='业务员1' then 1 else 0 end) 数量1,
sum(case when 促销员='促销员2' and 业务员='业务员1' then 1 else 0 end) 数量2,
sum(case when 促销员='促销员1' and 业务员='业务员2' then 1 else 0 end) 数量3,
sum(case when 促销员='促销员2' and 业务员='业务员2' then 1 else 0 end) 数量4
from tb a group by 产品
/*
产品 数量1 数量2 数量3 数量4
---------- ----------- ----------- ----------- -----------
001 1 0 0 1
002 1 0 0 1
003 0 1 1 0
*/