当另一列的值出现在MSSQL 2014中时,是否有任何方法可以更新/选择一个列中的数据?

时间:2019-04-17 08:03:16

标签: sql sql-server

我知道问题本身有点令人困惑,我不确定该如何措辞,因此,我想举一些例子来更好地解释我的问题。

首先,我将从应用程序数据库中提取数据以进行验证。因此,提取的数据将采用以下表格格式

VAB MMO BeerfestCircle 1 NO = OM1, VAB MMO BeerfestCircle 2 NO = OM2, VAB MMO BeerfestOutdazzling 1 NO = OM3, VAB MMO BeerfestOutdazzling 2 NO = OM4, BOAR VAP EG SAM Blaster Out 1 NO = OG1, BOAR VAP EG SAM Blaster Out 2 NO = OG2, BOAR VAP EG SAM Blaster Cir 1 NO = OG3, BOAR VAP EG SAM Blaster Cir 2 NO = OG4

第一种情况:

GUID    Name                                Value  TimeStamp
----    --------------------------------    -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO     10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO     20      11:00
1111    BOAR VAP EG SAM Blaster Cir 1 NO     30      11:00
1111    BOAR VAP EG SAM Blaster Cir 2 NO     40      11:00
1111    VAB MMO BeerfestCircle 1 NO          50      11:00
1111    VAB MMO BeerfestCircle 2 NO          60      11:00
1111    VAB MMO BeerfestOutdazzling 1 NO     70      11:00
1111    VAB MMO BeerfestOutdazzling 2 NO     80      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO     90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO     100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO     110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO     120     12:00
2222    VAB MMO BeerfestCircle 1 NO          130     12:00
2222    VAB MMO BeerfestCircle 2 NO          140     12:00
2222    VAB MMO BeerfestOutdazzling 1 NO     150     12:00
2222    VAB MMO BeerfestOutdazzling 2 NO     160     12:00

第一种情况的预期结果:

GUID    Name                               Value  TimeStamp
----   ---------------------------------   -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO    10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO    20      11:00
1111    BOAR VAP EG SAM Blaster Cir 1 NO    30      11:00
1111    BOAR VAP EG SAM Blaster Cir 2 NO    40      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO    90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO    100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO    110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO    120     12:00

第二种情况

GUID    Name                                Value  TimeStamp
----    --------------------------------    -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO     10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO     20      11:00
1111    VAB MMO BeerfestCircle 1 NO          50      11:00
1111    VAB MMO BeerfestCircle 2 NO          60      11:00
1111    VAB MMO BeerfestOutdazzling 1 NO     70      11:00
1111    VAB MMO BeerfestOutdazzling 2 NO     80      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO     90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO     100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO     110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO     120     12:00
2222    VAB MMO BeerfestCircle 1 NO          130     12:00
2222    VAB MMO BeerfestCircle 2 NO          140     12:00
2222    VAB MMO BeerfestOutdazzling 1 NO     150     12:00
2222    VAB MMO BeerfestOutdazzling 2 NO     160     12:00

第二种情况的预期结果:

GUID    Name                               Value  TimeStamp
----   ---------------------------------   -----  ---------
1111    BOAR VAP EG SAM Blaster Out 1 NO    10      11:00
1111    BOAR VAP EG SAM Blaster Out 2 NO    20      11:00
1111    VAB MMO BeerfestOutdazzling 1 NO    70      11:00
1111    VAB MMO BeerfestOutdazzling 2 NO    80      11:00
2222    BOAR VAP EG SAM Blaster Out 1 NO    90      12:00
2222    BOAR VAP EG SAM Blaster Out 2 NO    100     12:00
2222    BOAR VAP EG SAM Blaster Cir 1 NO    110     12:00
2222    BOAR VAP EG SAM Blaster Cir 2 NO    120     12:00

在表中,查询后始终会显示BOAR值,如果没有BOAR值,则将使用VAB(s)值替换BOAR(s)值。 BOAR(s)或VAB(s)值,将不会显示记录。我们将非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

请考虑使用row_number。此解决方案假定X始终位于最后一个字符的三个位置。

select guid, name, value, timestamp
from (
   select *, 
      row_number() over (partition by guid, substring(name, len(name)-3,1) order by name) rn
   from data
) t
where rn = 1

DBFIDDLE