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行的數據集。我試圖選擇一個當然不起作用的臨時表。然後,我想創建一個表來插入,但我不得不每次截斷它,如果兩個用戶在同一時間使用它,它會變得很難看。
建議?