MS SQL SERVER - 循环标头和详细信息

问题描述 投票:0回答:2

我是MSSQL SERVER的新手。我正在接受循环挑战。

这是我的情景:

我有一个事务表,其中填充了SMS消息传递的数据。 (tbl_sentTransaction)

这是它的样子:

TransCtr|TransNum|TransInfo
---------------------------
      1 |11111111|some info 1
---------------------------
      2 |11111111|some info 2
---------------------------
      3 |11111111|some info 3
---------------------------
      4 |11111111|some info 4
---------------------------

现在,从tbl_sentTransaction,我必须将它插入到自己的表中。

所以我有一个标题表和详细信息表。

这就是我想要做的。

如果来自tbl_sentTransaction的记录具有相同的TransNum,我会将其视为一条记录。所以我会将TransNum插入标题表一次。

然后我会多次将TransInfo插入到详细信息表中。所以基于给定的例子:

tbl_trans_header

------------------
TransCtr|TransNum
------------------
      1 |11111111
------------------



tbl_trans_detail

------------------------------
TransCtr|TransNum|TransInfo
-------------------------------
      1 |11111111| some info 1
-------------------------------
      1 |11111111| some info 2
-------------------------------
      1 |11111111| some info 3
-------------------------------

你能帮助我实现这个目标吗?我不能让它发挥作用。希望我能很好地解释自己。非常感谢。任何建议将不胜感激。

sql-server database
2个回答
0
投票

如果在处理事务表后删除它,则可以使用以下代码

insert into tbl_trans_detail (
    TransCtr, TransNum, TransInfo
)
select
    TransCtr, TransNum, TransInfo
from tbl_sentTransaction

insert into tbl_trans_header (
    TransCtr, TransNum
)
select distinct
    1, TransNum
from tbl_sentTransaction

0
投票

你可以用它。

INSERT INTO tbl_trans_header (TransCtr, TransNum)
SELECT MIN(TransCtr), TransNum
FROM tbl_sentTransaction
GROUP BY TransNum


INSERT tbl_trans_detail (TransCtr, TransNum, TransInfo)
SELECT MIN(TransCtr) OVER(PARTITION BY TransNum), TransNum, TransInfo
FROM tbl_sentTransaction
© www.soinside.com 2019 - 2024. All rights reserved.