34,838
社区成员




SELECT * FROM
(
SELECT TB.ID,TB.NAME,TYPE1 FROM @WORK TA
RIGHT JOIN @STAFF TB
ON TA.STAFFNAME=TB.NAME
) TA
PIVOT
(COUNT(TYPE1)
FOR TYPE1 IN ([产品推广],[业务联络],[销售产品])
) AS PT
ORDER BY ID
/*
ID NAME 产品推广 业务联络 销售产品
----------- ---------- ----------- ----------- -----------
1 张三 0 0 1
2 李四 2 0 0
3 王五 1 1 0
4 赵六 0 0 0
(4 行受影响)
*/
DECLARE @STAFF TABLE(ID INT, NAME VARCHAR(10))
INSERT INTO @STAFF(ID,NAME)
SELECT 1,'张三'
UNION ALL
SELECT 2,'李四'
UNION ALL
SELECT 3,'王五'
UNION ALL
SELECT 4,'赵六'
DECLARE @WORK TABLE(ID INT, STAFFNAME VARCHAR(10),TYPE1 VARCHAR(10))
INSERT INTO @WORK (ID,STAFFNAME,TYPE1)
SELECT 1,'李四','产品推广'
UNION ALL
SELECT 2,'李四','产品推广'
UNION ALL
SELECT 3,'王五','业务联络'
UNION ALL
SELECT 4,'王五','产品推广'
UNION ALL
SELECT 5,'张三','销售产品'
SELECT * FROM
(
SELECT TB.ID,TB.NAME,TYPE1 FROM @WORK TA
RIGHT JOIN @STAFF TB
ON TA.STAFFNAME=TB.NAME
) TA
PIVOT
(COUNT(TYPE1)
FOR TYPE1 IN ([产品推广],[业务联络],[销售产品])
) AS PT
/*
(4 行受影响)
(5 行受影响)
ID NAME 产品推广 业务联络 销售产品
----------- ---------- ----------- ----------- -----------
2 李四 2 0 0
3 王五 1 1 0
1 张三 0 0 1
4 赵六 0 0 0
(4 行受影响)
*/
--左连接加一个行列转换
declare @staff table(id int,[name] varchar(50))
insert into @staff select 1,'张三'
insert into @staff select 2,'李四'
insert into @staff select 3,'王五'
insert into @staff select 4,'赵六'
declare @work table(id int,staffname varchar(50),type varchar(50))
insert into @work select 1,'李四','产品推广'
insert into @work select 2,'李四','产品推广'
insert into @work select 3,'王五','业务联络'
insert into @work select 4,'王五','产品推广'
insert into @work select 5,'张三','销售产品'
select a.[name],
产品推广数=sum(case when type='产品推广' then 1 else 0 end),
业务联络数=sum(case when type='业务联络' then 1 else 0 end),
产品销售数=sum(case when type='产品销售' then 1 else 0 end)
from @staff a left join @work b on a.name=b.staffname
group by a.id,a.[name]
select a.name,count(isnull((select 1 from work where staffname=a.name and type1='产品推广'),0) as 产品推广数,
count(isnull((select 1 from work where staffname=a.name and type1='业务联络'),0) as 业务联络数,
count(isnull((select 1 from work where staffname=a.name and type1='产品销售'),0) as 产品销售数
from staff a group by a.name
select 姓名=s.[name],
产品推广数=(select count(staffname) from work where type1 ='产品推广' and staffname=s.[name]),
业务联络数=(select count(staffname) from work where type1 ='业务联络' and staffname=s.[name]),
产品销售数=(select count(staffname) from work where type1 ='销售产品' and staffname=s.[name])
from staff s
declare @staff table(id int,name varchar(50))
insert into @staff select 1,'张三'
insert into @staff select 2,'李四'
insert into @staff select 3,'王五'
insert into @staff select 4,'赵六'
declare @work table(id int,staffname varchar(50),type varchar(50))
insert into @work select 1,'李四','产品推广'
insert into @work select 2,'李四','产品推广'
insert into @work select 3,'王五','业务联络'
insert into @work select 4,'王五','产品推广'
insert into @work select 5,'张三','销售产品'
select a.name,
sum(case when type='产品推广' then 1 else 0 end) as '产品推广数',
sum(case when type='业务联络' then 1 else 0 end) as '业务联络数',
sum(case when type='产品销售' then 1 else 0 end) as '产品销售数'
from @staff a left join @work b on a.name=b.staffname
group by a.id,a.name order by a.id
select a.name,count(isnull(select 1 from work where staffname=a.name and type1='产品推广'),0)) as 产品推广数,
count(isnull(select 1 from work where staffname=a.name and type1='业务联络'),0)) as 业务联络数,
count(isnull(select 1 from work where staffname=a.name and type1='产品销售'),0)) as 产品销售数
from staff a group by a.name
select a.name,产品数=SUM(CASEWHEN type1='产品推广' THEN 1 ELSE 0 END),
业务数=SUM(........='业务联络' THEN 1 ELSE 0 END),
...略
FROM staff a
LEFT JOIN work b
ON a.name=b.staffname
GROUP BY a.name