从SQL Server表中一起读取2行

时间:2015-05-25 10:32:00

标签: sql sql-server

我有一张表格,其中包含以下数据:

Record Type             MID             CvvId            Date           Amount
-------------        ----------        -------------   -------------   ---------
    2E                8715613516                         2014-25-03        27.12
    3E                asd5156154485         M                    
    2E                8751651650                         2014-25-03        27.13
    3E                asd5165434485         S                      

不,我必须读取此表的值并将其插入另一个表,列为:

MID, CvvId, Date, Amount.

现在,对于记录类型“2E”的每个记录,此后的行将始终为记录类型“3E”

对于列MID,CvvId,Date,Amount,我必须使用记录类型“2E”。对于CvvId,我必须使用记录类型“3E”。在每2E记录之后,我会获得3E记录。我必须在SQL Server中编写一个存储过程,以将此数据插入另一个表中。如何实现这一目标?

3 个答案:

答案 0 :(得分:2)

我通过添加一个对于2E和3E记录都是唯一的transactionId列来更改您的表,如下所示

create table tableE(
TId int,
rtype   varchar(20),
MID varchar(20),
CvvId   varchar(20),
date    date,
amount  decimal(18,2))

然后关注SELECT语句将帮助您将它们组合成一行

select * 
from tableE t1
inner join tableE t2 on t1.tid = t2.tid
where t1.rtype = '2E' and t2.rtype = '3E'

答案 1 :(得分:0)

以下是使用bulk insert执行此操作的过程。如另一个答案所示,您希望将基础表的定义更改为具有标识列:

create table atable (
    atableId int not null identity(1, 1) primary key,
    rtype   varchar(20),
    MID varchar(20),
    CvvId   varchar(20),
    date    date,
    amount  decimal(18,2)
);

然后,在此表上定义一个排除标识的视图:

create view v_atable as 
   select rtype, mid, cvvid, date, amount
   from atable;

现在,使用bulk insert进入视图。这将为每一行生成一个自动递增的标识值。然后你有一个订单,可以识别下一行。

答案 2 :(得分:0)

我得到了它的工作。如上所述,添加了一个新的自动增量(不一定是P.k)字段作为Tid。并编写了以下查询: -

SELECT p.MID,LEAD(p.CvvId)OVER(OR.Pr.Tid)NextCvv, LEAD(p.RecordType)OVER(OR.by p.Tid)NextRecordType 从表p

过滤完记录集后,在某些商业条件下,它有效。谢谢大家的帮助!