MS SQL这种情况的怎么转!!!!!!

自_由_人 2009-04-13 09:20:18
表一:
产品 促销员 业务员 数量
001 促销员1 业务员1 1
002 促销员1 业务员1 1
003 促销员1 业务员2 1
001 促销员2 业务员2 1
002 促销员2 业务员2 1
003 促销员2 业务员1 1
要改变为:
业务员1 业务员1 业务员2 业务员2
促销员1 促销员2 促销员1 促销员2
产品 数量 数量 数量 数量
001 1 0 0 1
002 1 0 1
003 0 1 1 0
这种,怎么处理
...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
you_tube 2009-04-13
  • 打赏
  • 举报
回复
只能帮顶了
htl258_Tony 2009-04-13
  • 打赏
  • 举报
回复
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 行受影响)
*/
这样好看点,再慢慢改进。
-狙击手- 2009-04-13
  • 打赏
  • 举报
回复
------------------------------------------------------------------------
-- 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
htl258_Tony 2009-04-13
  • 打赏
  • 举报
回复
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 行受影响)
*/
自_由_人 2009-04-13
  • 打赏
  • 举报
回复
要动态的
贾桂权 2009-04-13
  • 打赏
  • 举报
回复
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
*/
sqysll 2009-04-13
  • 打赏
  • 举报
回复
是啊,要试验啊。
  • 打赏
  • 举报
回复
汗。这复杂

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧