求一个报表 sql

wangfengpp2004 2015-07-21 07:02:48
表b(物料,供应商,报价价格,报价次数)
记录(物料1,供应商1,1,第1次报价)

记录(物料1,供应商1,2,第2次报价)
记录(物料2,供应商1,1,第1次报价)
记录(物料3,供应商1,1,第1次报价)

记录(物料2,供应商2,1,第1次报价)
记录(物料2,供应商2,1,第2次报价)
记录(物料3,供应商2,1,第1次报价)
记录(物料3,供应商3,1,第1次报价)


。。。。。。。 表中的记录是不确定的,即供应商不确定多少家,料号不确定是多少个,报价次数也不确定多少次

要生成如下报表。。

物料 供应商1第一次报价 供应商1第2次报价 供应商2第1次报价 供应商2第2次报价 供应商3第1次报价

物料1 1 2
物料2 1 1 1
物料3 1
...全文
131 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Pact_Alice 2015-07-23
首先你用什么做报表的,是SQL Server 中的Report Service吗?如果是这个的话是不可以用动态语句的,它有自带的矩阵,帮你做到你需要的
回复
刨坑数据 2015-07-23
这是一个典型的交叉表,几乎任何报表工具都能轻易搞定。直接取数即可,不用在SQL处理转置,比如用润乾集算报表这样写:

行列都可以动态。
回复
xiaoxiangqing 2015-07-22
用case when来生成动态语句
回复
雨夹雪 2015-07-22
create Table T
(
物料 Varchar(10),
供应商 Varchar(10),
价格 int,
报价次数 Varchar(10)
)

insert into T values('物料1','供应商1',1,'第1次报价')
insert into T values('物料1','供应商1',2,'第2次报价')
insert into T values('物料2','供应商1',3,'第1次报价')
insert into T values('物料3','供应商1',4,'第1次报价')
insert into T values('物料2','供应商2',5,'第1次报价')
insert into T values('物料2','供应商2',6,'第2次报价')
insert into T values('物料3','供应商2',7,'第1次报价')
insert into T values('物料3','供应商3',8,'第1次报价')

Declare @where Varchar(8000)=''
Declare @sql Varchar(8000)
Select @where=@where+','+次数 From
(
Select distinct 供应商+报价次数 As 次数 from T
)S

Set @sql='
Select * From
(
Select 物料,供应商+报价次数 As 次数,价格 from T
)S
pivot
(
max(价格)
For
次数 in('+stuff(@where,1,1,'')+')
)P'
Exec (@sql)
回复
道玄希言 2015-07-21
可以得出你要的查询结果, 但是在报表中怎么做, 这个我就不知道了。
回复
道玄希言 2015-07-21
数据不多, 那就动态拼接SQL语句吧 先用供应商和报价次数分组 得出列名 然后动态拼接。
回复
wangfengpp2004 2015-07-21
供应商不多,理论上是没有限制,但是每次都是几个供应商而已啦,报价也不会很多次。 只是看大家有没有好的方法和思路参考下了。。 因为这样看起来比较直观点。 数据是不多的
回复
道玄希言 2015-07-21
我想知道, 比如, 1W供应商, 每个供应商大概有来了上十次报价, 你这报表成什么样子了 ?
回复
wangfengpp2004 2015-07-21
顶~~~~~~~~~~~~~~~~~~~~~~~~~~~·····
回复
shoppo0505 2015-07-21
这个报表没办法做。SQL中可以不确定输出列数,但是报表中是固定的。然而根据你的要求,列数肯定是动态的,所以没法做
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-07-21 07:02
社区公告
暂无公告