我有一个 SQL Server 表。我希望记录如下例所示。 我想按照插入的顺序检索 TrainType 值。 我正在考虑附加一个序列号列来保证检索顺序与插入顺序相匹配。
或者,我也想知道,有没有比附加序列号更好的方法??
这是样本插页。 这使用 xml 来填充 Speed 和 TrainType 列。 我希望将序列列添加到此插入语句中,并且我正在寻找需要填充序列号的查询
INSERT INTO BSpeedRestriction
(UID
,[Version]
,Speed
,TrainType,
*[Sequence]* <<--
)
SELECT @UID,
@Version,
a.c.value('Speed[1]','int') as 'Speed',
a.c.value('TrainType[1]/@Numeric','int') as 'TrainType',
??? <<--
FROM @BSpeedsXml.nodes('/BSpeed/Restriction') a(c)
因为您没有提供更多详细信息和 xml。我根据这个示例的假设重新创建了 XML。 据我了解,您需要对每个版本号恕我直言重置序列。所以你有多种选择。
declare @BSpeedsXml XML = N'
<BSpeed>
<Restriction><Speed>60</Speed><TrainType>2</TrainType></Restriction>
<Restriction><Speed>40</Speed><TrainType>1</TrainType></Restriction>
<Restriction><Speed>40</Speed><TrainType>3</TrainType></Restriction>
<Restriction><Speed>60</Speed><TrainType>6</TrainType></Restriction>
<Restriction><Speed>60</Speed><TrainType>5</TrainType></Restriction>
<Restriction><Speed>60</Speed><TrainType>4</TrainType></Restriction>
<Restriction><Speed>60</Speed><TrainType>1</TrainType></Restriction>
<Restriction><Speed>40</Speed><TrainType>2</TrainType></Restriction>
<Restriction><Speed>40</Speed><TrainType>4</TrainType></Restriction>
<Restriction><Speed>60</Speed><TrainType>5</TrainType></Restriction>
<Restriction><Speed>60</Speed><TrainType>6</TrainType></Restriction>
<Restriction><Speed>60</Speed><TrainType>3</TrainType></Restriction>
</BSpeed>'
Declare @UID int = 115967
select
ID
,UID
,Version = case when ID <= 6 then 1 else 2 end
,x.Speed
,x.TrainType
--that would create a sequence number as expected (i would assume it should be reset on each version)
,SequenceNum = ROW_NUMBER() OVER (partition by case when ID <= 6 then 1 else 2 end ORDER by UID)
FROM (
SELECT --can have a row number to create as sequence
ID = ROW_NUMBER() OVER (ORDER by (select 1))
,UID = @UID,
Version = null,
Speed = a.c.value('Speed[1]','int'),
TrainType = a.c.value('TrainType[1]','int')
FROM @BSpeedsXml.nodes('/BSpeed/Restriction') a(c)
) x
结果:
身份证号码 | UID | 版本 | 速度 | 列车类型 | 序列号 |
---|---|---|---|---|---|
1 | 115967 | 1 | 60 | 2 | 1 |
2 | 115967 | 1 | 40 | 1 | 2 |
3 | 115967 | 1 | 40 | 3 | 3 |
4 | 115967 | 1 | 60 | 6 | 4 |
5 | 115967 | 1 | 60 | 5 | 5 |
6 | 115967 | 1 | 60 | 4 | 6 |
7 | 115967 | 2 | 60 | 1 | 1 |
8 | 115967 | 2 | 40 | 2 | 2 |
9 | 115967 | 2 | 40 | 4 | 3 |
10 | 115967 | 2 | 60 | 5 | 4 |
11 | 115967 | 2 | 60 | 6 | 5 |
12 | 115967 | 2 | 60 | 3 | 6 |