将带有游标搜索功能的临时表插入现有SQL查询

将带有游标搜索功能的临时表插入现有SQL查询,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,我需要帮助,试图加入一个有两个查询。 第一个查询是我试图构建的报表的主查询 PARAMETERS [DocumentNo] String "", [hideComments] boolean False; Select cus.name, cus.addra, cus.addrb, cus.addrc, cus.addrd, cus.addre, cus.pcode as PostCode, br.name As BranchName, br.addra As BrAddrA, br.addr

我需要帮助,试图加入一个有两个查询。 第一个查询是我试图构建的报表的主查询

PARAMETERS [DocumentNo] String "", [hideComments] boolean False;

Select cus.name, cus.addra, cus.addrb, cus.addrc, cus.addrd, cus.addre, cus.pcode as PostCode, br.name As BranchName, br.addra As BrAddrA, br.addrb As BrAddrB, 
br.addrc As BrAddrC, br.addrd As BrAddrD, br.addre As BrAddrE, br.postcode As postcodebr, br.Phonenumber as brphonenumber, v.make as vmake, v.YoM as vyear, v.model as vmodel, v.carcolour as vcolor, v.pkey as license, v.state as vstate, V.mileage as mileageout
,h.datetime, h.document, h.acct, h.inits, h.payref, h.corder, h.goods, h.vat,
(Case IsNull(p.supppart,'') when '' then l.part else p.supppart end) part, l.bopdes,
l.qty, l.unit, c.a2 As 'WorkOrderComments'
from jheads h
inner join jlines l on l.document = h.document
inner join customer cus on cus.keycode = h.acct
left join plines p on l.porder = p.document + '/' + cast(p.seqno as varchar(3))
left join codes c on c.keycode= h.branch and c.prefix='WA' and c.subkey1=0
left join branches br on br.branch = h.branch 
left join vehicles v on v.Custacnum = h.acct
where H.Document= [DocumentNo]
我需要添加到此报表查询中的信息是:;我需要“提醒”表中两种类型的截止日期。该信息的工作原理是,类型列填充了两个选项“EMSN”或“INSP”中的一个。此表中的“VRM”列与车辆表中的“pkey”列相关,该表在第一次查询中已准备就绪。VRM是与订单相关的许可证,但许可证可以有多个EMSN和INSP记录,这些记录按顺序排序,我需要将每种类型的最新记录合并到报告中(因此我需要专门绘制两条记录)

我用来收集这些信息并临时存储这些信息的查询是

use [Masterdatabase]
GO
DECLARE @source TABLE
(
    CustAcNum   VARCHAR(255) NOT NULL,
    SeqNo       INT NOT NULL,
    Class       VARCHAR(255),
    [type]      VARCHAR(255) NOT NULL,
    Vrm         VARCHAR(12),
    Duedate     DATETIME,
    VehicleId   UNIQUEIDENTIFIER
);
DECLARE @filtered TABLE
(
    CustAcNum   VARCHAR(255) NOT NULL,
    SeqNo       INT NOT NULL,
    Class       VARCHAR(255),
    [type]      VARCHAR(255) NOT NULL,
    Vrm         VARCHAR(12),
    Duedate     DATETIME,
    VehicleId   UNIQUEIDENTIFIER
);


INSERT INTO @source
SELECT v.CustAcNum, r.SeqNo, r.[Class], r.[type], r.Vrm, r.Duedate, r.VehicleId
FROM dbo.Vehicles AS v
INNER JOIN dbo.Reminders AS r ON r.VRM = v.Pkey
WHERE r.[Type] = 'EMSN'
GROUP BY v.CustAcNum, r.SeqNo, r.[Class], r.[type], r.Vrm, r.Duedate, r.VehicleId
UNION
SELECT v.CustAcNum, r.SeqNo, r.[Class], r.[type], r.Vrm, r.Duedate, r.VehicleId
FROM dbo.Vehicles AS v
INNER JOIN dbo.Reminders AS r ON r.VRM = v.Pkey
WHERE r.[Type] = 'INSP'
GROUP BY v.CustAcNum, r.SeqNo, r.[Class], r.[type], r.Vrm, r.Duedate, r.VehicleId
ORDER BY v.CustAcNum, r.Seqno DESC;


DECLARE
     @custAcNum VARCHAR(255)
    ,@seqNo     INT
    ,@class     VARCHAR(255)
    ,@type      VARCHAR(255)
    ,@vrm       VARCHAR(12)
    ,@duedate   DATETIME
    ,@vehicleId UNIQUEIDENTIFIER

DECLARE source_cursor CURSOR
    FAST_FORWARD
    FOR SELECT * FROM @source WHERE NULLIF(ltrim(rtrim(CustAcNum)), '') IS NOT NULL;

OPEN source_cursor
FETCH NEXT FROM source_cursor 
INTO @custAcNum, @seqNo, @class, @type, @vrm, @duedate, @vehicleId;

WHILE @@FETCH_STATUS = 0
BEGiN
    IF NOT EXISTS (SELECT 1 FROM @filtered WHERE CustAcNum = @custAcNum AND [type] = @type)
    BEGIN
        INSERT INTO @filtered
        VALUES (@custAcNum, @seqNo, @class, @type, @vrm, @duedate, @vehicleId);
    END

    FETCH NEXT FROM source_cursor 
    INTO @custAcNum, @seqNo, @class, @type, @vrm, @duedate, @vehicleId;
END

CLOSE source_cursor;
DEALLOCATE source_cursor;

select * from @filtered;
我现在需要将这两种类型连接在一起,并能够从中提取两种类型的到期日

我被困在这件事上了,所以任何帮助我都会感激的