邹先生的东西看不懂,只能麻烦大家了

kelly_leecn 2008-03-14 11:07:41
看了半天邹先生的东东,再看看我的要解决的问题,折磨了很久,还是问大家吧

一.字段说明
fmaterialnumber(物料编码) fmaterialname(物料名称) fmaterialmodel(型号) fauxpropnumber(颜色编码) fauxpropname(颜色名称)

fbuunitname(单位) fbuqty(数量) fstocknumber(仓库代码) fstockname(仓库名称)
二.表中fmaterialnumber,fauxpropnumber,fstocknumber为联合主键
三.下面是表中的数据
fmaterialnumber fmaterialname fmaterialmodel fauxpropnumber fauxpropname fbuunitname fbuqty fstocknumber fstockname
1001 产品1 A 001 红色 台 10 01 天津
1001 产品1 A 002 兰色 台 20 01 天津
1002 产品2 B 001 红色 台 10 01 天津
1002 产品2 B 001 红色 台 20 02 北京
1003 产品3 C 001 红色 台 30 01 天津
1004 产品4 D 001 红色 台 40 02 北京
...
...
四.想得到的结果是
fmaterialnumber fmaterialname fmaterialmodel fauxpropnumber fauxpropname fbuunitname fbuqty 天津 北京 ...
1001 产品1 A 001 红色 台 10 10 ...
1001 产品1 A 002 兰色 台 20 20 ...
1002 产品2 B 001 红色 台 10 10 20 ...
1003 产品3 c 001 红色 台 30 30 ...
1004 产品4 D 001 红色 台 40 40 ...
...
...
五.注意事项

1.仓库是随时要增加的,所以不固定,必须考虑这个问题.
2.最好在后面增加一个栏位就是仓库数量合计

有劳大家了!^_^
...全文
296 36 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vansan 2008-03-17
  • 打赏
  • 举报
回复
我是用游標提取實現行轉列的問題
N層樓上的那位說的張三李四的成績表的問題

可以把每個學生的姓名單獨提取到游標里, 然后EXEC('ALTER TABLE 表 ADD 【'+@姓名+'】 數據類型'),再exec ('update 表 set ['+@姓名+']=成績 ......')
用游標可能速度上有點慢
showrock 2008-03-16
  • 打赏
  • 举报
回复
只能留名了~~~~~~~~~
HQ_HE 2008-03-16
  • 打赏
  • 举报
回复
~~~
bootupnow 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 being21 的回复:]
乌龟现在最猛!
[/Quote]
的确,SQL版猛的一塌糊涂!
being21 2008-03-15
  • 打赏
  • 举报
回复
乌龟现在最猛!
-狙击手- 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 dawugui 的回复:]
强烈支持.
[/Quote]


无耻,强烈反对 ,嘿嘿
dawugui 2008-03-15
  • 打赏
  • 举报
回复
强烈支持.
kelly_leecn 2008-03-15
  • 打赏
  • 举报
回复
结帐了,我认为乌龟兄真诚,happy兄也解决了我的问题.所以乌龟兄80分,happy兄20分.合理吗?
dawugui 2008-03-15
  • 打赏
  • 举报
回复
你在exec(@sql)
之前用
print @sql

然后看解析后的代码.
dawugui 2008-03-15
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 kelly_leecn 的回复:]
对了,能不能教我读懂你的代码?
[/Quote]

declare @sql varchar(8000)
set @sql = 'select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME '
select @sql = @sql + ' , sum(case rtrim(FSTOCKNAME) + '','' + rtrim(FSTOCKNUMBER) when ''' + newcol + ''' then FBUQTY else 0 end) [' + left( newcol , charindex(',' , newcol) -1) + ']'
from (select distinct rtrim(FSTOCKNAME) + ',' + rtrim(FSTOCKNUMBER) newcol from tb) as a
set @sql = @sql + ' , sum(FBUQTY) 合计 from tb group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME'

解析为
select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME ,
sum(case rtrim(FSTOCKNAME) + ',' + rtrim(FSTOCKNUMBER) when '北京,02' then FBUQTY else 0 end) [北京] ,
sum(case rtrim(FSTOCKNAME) + ',' + rtrim(FSTOCKNUMBER) when '天津,01' then FBUQTY else 0 end) [天津] ,
sum(FBUQTY) 合计
from tb
group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME



declare @sql varchar(8000)
set @sql = 'select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME '
select @sql = @sql + ' , sum(case FSTOCKNAME when ''' + FSTOCKNAME + ''' then FBUQTY else 0 end) [' + FSTOCKNAME + ']'
from (select distinct FSTOCKNAME from tb) as a
set @sql = @sql + ' , sum(FBUQTY) 合计 from tb group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME'
exec(@sql)
解析为
select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME ,
sum(case FSTOCKNAME when '北京' then FBUQTY else 0 end) [北京] ,
sum(case FSTOCKNAME when '天津' then FBUQTY else 0 end) [天津] ,
sum(FBUQTY) 合计
from tb
group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME


kelly_leecn 2008-03-15
  • 打赏
  • 举报
回复
一行一行的教一下,好不好!
dawugui 2008-03-15
  • 打赏
  • 举报
回复
FSTOCKNUMBER
FSTOCKNAME
这两字段内容其实是重复的吧?
似乎FSTOCKNUMBER没有用,只需要FSTOCKNAME即可.
如果你两个字段都用,用我上面的SQL.

其实只需要下面的SQL即可.
declare @sql varchar(8000)
set @sql = 'select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME '
select @sql = @sql + ' , sum(case FSTOCKNAME when ''' + FSTOCKNAME + ''' then FBUQTY else 0 end) [' + FSTOCKNAME + ']'
from (select distinct FSTOCKNAME from tb) as a
set @sql = @sql + ' , sum(FBUQTY) 合计 from tb group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME'
exec(@sql)

/*
FMATERIALNUMBER FMATERIALNAME FMATERIALMODEL FAUXPROPNUMBER FAUXPROPNAME FBUUNITNAME 北京 天津 合计
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------- ------------ ----------- ---------------------------------------- ---------------------------------------- ----------------------------------------
1001 产品1 A 001 红色 台 0 10 10
1001 产品1 A 002 兰色 台 0 20 20
1002 产品2 B 001 红色 台 20 10 30
1003 产品3 C 001 红色 台 0 30 30
1004 产品4 D 001 红色 台 40 0 40
*/
kelly_leecn 2008-03-15
  • 打赏
  • 举报
回复
对了,能不能教我读懂你的代码?
-狙击手- 2008-03-15
  • 打赏
  • 举报
回复
你来晚了
dawugui 2008-03-15
  • 打赏
  • 举报
回复
--搞定.
CREATE TABLE [dbo].[tb] (
[FMATERIALNUMBER] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALNAME] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALMODEL] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FAUXPROPNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,
[FAUXPROPNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUUNITNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUQTY] [numeric](18, 0) NULL ,
[FSTOCKNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FSTOCKNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','002','兰色','台',20,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',20,'02','北京')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1003','产品3','C','001','红色','台',30,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1004','产品4','D','001','红色','台',40,'02','北京')
go

declare @sql varchar(8000)
set @sql = 'select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME '
select @sql = @sql + ' , sum(case rtrim(FSTOCKNAME) + '','' + rtrim(FSTOCKNUMBER) when ''' + newcol + ''' then FBUQTY else 0 end) [' + left( newcol , charindex(',' , newcol) -1) + ']'
from (select distinct rtrim(FSTOCKNAME) + ',' + rtrim(FSTOCKNUMBER) newcol from tb) as a
set @sql = @sql + ' , sum(FBUQTY) 合计 from tb group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME'
exec(@sql)

drop table tb

/*
FMATERIALNUMBER FMATERIALNAME FMATERIALMODEL FAUXPROPNUMBER FAUXPROPNAME FBUUNITNAME 北京 天津 合计
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------- ------------ ----------- ---------------------------------------- ---------------------------------------- ----------------------------------------
1001 产品1 A 001 红色 台 0 10 10
1001 产品1 A 002 兰色 台 0 20 20
1002 产品2 B 001 红色 台 20 10 30
1003 产品3 C 001 红色 台 0 30 30
1004 产品4 D 001 红色 台 40 0 40

*/
-狙击手- 2008-03-15
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[tb] ( 
[FMATERIALNUMBER] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALNAME] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALMODEL] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FAUXPROPNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,
[FAUXPROPNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUUNITNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUQTY] [numeric](18, 0) NULL ,
[FSTOCKNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FSTOCKNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','002','兰色','台',20,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',20,'02','北京')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1003','产品3','C','001','红色','台',30,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1004','产品4','D','001','红色','台',40,'02','北京')
go

declare @sql varchar(8000)
set @sql = 'select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME '
select @sql = @sql + ' , sum(case FSTOCKNAME when ''' + FSTOCKNAME + ''' then FBUQTY else 0 end) [' + FSTOCKNAME + ']'
from (select distinct FSTOCKNAME from tb) as a order by FSTOCKNAME desc
set @sql = @sql + ' , sum(FBUQTY) 合计 from tb group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME'
exec(@sql)

drop table tb
/*\
FMATERIALNUMBER FMATERIALNAME FMATERIALMODEL FAUXPROPNUMBER FAUXPROPNAME FBUUNITNAME 天津 北京 合计
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------- ------------ ----------- ---------------------------------------- ---------------------------------------- ----------------------------------------
1001 产品1 A 001 红色 台 10 0 10
1001 产品1 A 002 兰色 台 20 0 20
1002 产品2 B 001 红色 台 10 20 30
1003 产品3 C 001 红色 台 30 0 30
1004 产品4 D 001 红色 台 0 40 40


*/
-狙击手- 2008-03-15
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[tb] ( 
[FMATERIALNUMBER] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALNAME] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALMODEL] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FAUXPROPNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,
[FAUXPROPNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUUNITNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUQTY] [numeric](18, 0) NULL ,
[FSTOCKNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FSTOCKNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','002','兰色','台',20,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',20,'02','北京')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1003','产品3','C','001','红色','台',30,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1004','产品4','D','001','红色','台',40,'02','北京')
go

declare @sql varchar(8000)
set @sql = 'select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME '
select @sql = @sql + ' , sum(case FSTOCKNAME when ''' + FSTOCKNAME + ''' then FBUQTY else 0 end) [' + FSTOCKNAME + ']'
from (select distinct FSTOCKNAME from tb) as a
set @sql = @sql + ' , sum(FBUQTY) 合计 from tb group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME'
exec(@sql)

drop table tb
/*\
FMATERIALNUMBER FMATERIALNAME FMATERIALMODEL FAUXPROPNUMBER FAUXPROPNAME FBUUNITNAME 北京 天津 合计
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------- ------------ ----------- ---------------------------------------- ---------------------------------------- ----------------------------------------
1001 产品1 A 001 红色 台 0 10 10
1001 产品1 A 002 兰色 台 0 20 20
1002 产品2 B 001 红色 台 20 10 30
1003 产品3 C 001 红色 台 0 30 30
1004 产品4 D 001 红色 台 40 0 40

*/
kelly_leecn 2008-03-15
  • 打赏
  • 举报
回复
即同一种产品同一种颜色,如果仓库不同,则只需要把该产品汇总在一行,不同仓库的数量平行显示.
kelly_leecn 2008-03-15
  • 打赏
  • 举报
回复
结果是:
四.想得到的结果是
fmaterialnumber fmaterialname fmaterialmodel fauxpropnumber fauxpropname fbuunitname 天津 北京 ...
1001 产品1 A 001 红色 台 10 0
1001 产品1 A 002 兰色 台 20 0 ...
1002 产品2 B 001 红色 台 10 20 ...
1003 产品3 c 001 红色 台 30 0
1004 产品4 D 001 红色 台 0 40
...
...

注意物料为1002的仓库分布前后变化,你上面写的不是我要求的.
dawugui 2008-03-15
  • 打赏
  • 举报
回复
--少了个合计.
CREATE TABLE [dbo].[tb] (
[FMATERIALNUMBER] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALNAME] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FMATERIALMODEL] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[FAUXPROPNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL,
[FAUXPROPNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUUNITNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FBUQTY] [numeric](18, 0) NULL ,
[FSTOCKNUMBER] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[FSTOCKNAME] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1001','产品1','A','002','兰色','台',20,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',10,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1002','产品2','B','001','红色','台',20,'02','北京')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1003','产品3','C','001','红色','台',30,'01','天津')
insert into tb(FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FBUQTY,FSTOCKNUMBER,FSTOCKNAME)
values('1004','产品4','D','001','红色','台',40,'02','北京')
go

declare @sql varchar(8000)
set @sql = 'select FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FSTOCKNUMBER '
select @sql = @sql + ' , sum(case FSTOCKNAME when ''' + FSTOCKNAME + ''' then FBUQTY else 0 end) [' + FSTOCKNAME + ']'
from (select distinct FSTOCKNAME from tb) as a
set @sql = @sql + ' , sum(FBUQTY) 合计 from tb group by FMATERIALNUMBER,FMATERIALNAME,FMATERIALMODEL,FAUXPROPNUMBER,FAUXPROPNAME,FBUUNITNAME,FSTOCKNUMBER'
exec(@sql)

drop table tb

/*
FMATERIALNUMBER FMATERIALNAME FMATERIALMODEL FAUXPROPNUMBER FAUXPROPNAME FBUUNITNAME FSTOCKNUMBER 北京 天津 合计
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------- ------------ ----------- ------------ ---------------------------------------- ---------------------------------------- ----------------------------------------
1001 产品1 A 001 红色 台 01 0 10 10
1001 产品1 A 002 兰色 台 01 0 20 20
1002 产品2 B 001 红色 台 01 0 10 10
1002 产品2 B 001 红色 台 02 20 0 20
1003 产品3 C 001 红色 台 01 0 30 30
1004 产品4 D 001 红色 台 02 40 0 40
*/
加载更多回复(16)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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