0
我被要求生成SSRS 2008报告,该报告将打印零件标签。零件部门希望能够选择订单上的哪些零件号码需要每个零件的标签。例如,如果客户订购了50个螺栓,那么他们需要打印50张标签,但如果他们订购了5个轮胎,他们需要为每个轮胎打印一张标签。选择不是问题,问题在于编写查询,以便为SSRS获取一个结果集。我正在使用SQL Server 2008 R2。从光标选择行到一个结果集中
我的查询:
declare @pmf varchar(4), @pro varchar(25), @desc varchar(50), @qty decimal(15, 2), @count int
declare csr cursor for
select opl.psk_pmf_id,
opl.psk_pro_id,
case when charindex(';', pdi.pdi_desc) = 0 then pdi.pdi_desc
else SUBSTRING(pdi.pdi_desc, 1, CHARINDEX(';', pdi.pdi_desc) - 1) end,
convert(integer, opl.opl_q_all)
from oph inner join opl on oph.oph_id = opl.oph_id
inner join pdi on opl.psk_pmf_id = pdi.pmf_id and opl.psk_pro_id = pdi.pro_id
where oph.oph_doc_id = 'C1216974'
order by opl.psk_pmf_id, opl.psk_pro_id
open csr
fetch next from csr into @pmf, @pro, @desc, @qty
while @@FETCH_STATUS = 0
begin
if rtrim(@pmf) + rtrim(@pro) in ('CAT0308144', 'CAT1P0808')
begin
select @pmf as pmf, @pro as pro, @desc as dscr, cast(@qty as integer) as qty
fetch next from csr into @pmf, @pro, @desc, @qty
end
else
set @count = 1
while @count <= @qty
begin
select @pmf as pmf, @pro as pro, @desc as dscr, 1 as qty
set @count = @count + 1
end
fetch next from csr into @pmf, @pro, @desc, @qty
end
close csr
deallocate csr
这给了我正确的数据。忽略if rtrim(@pmf) + rtrim(@pro) in ('CAT0308144', 'CAT1P0808')
,那是在那里确认返回正确的行数。问题是这会产生255行,每行一个记录。我想要的是一个包含255行的数据集。我试图选择一个当然不起作用的临时表。然后,我想创建一个表来插入,但我不得不每次截断它,如果两个用户在同一时间使用它,它会变得很难看。
建议?