Sql 如果字段E包含;MSD“CMT变更”;然后

Sql 如果字段E包含;MSD“CMT变更”;然后,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我不确定这是否可以在SQL查询中完成。我能做得很出色。 查询 SELECT A, B, C, D, E, F from TableA where D in ('MSD_CHANGE','MSD_CMT_CHANGE') 如果字段D包含MSD\u CMT\u CHANGE excel语言中的另一个单词E1=E2 目前,我从SQL中获取查询数据,并在Excel中运行脚本来执行此操作。 如果我可以在S

我不确定这是否可以在SQL查询中完成。我能做得很出色。

查询

SELECT
        A,
        B,
        C,
        D,
        E,
        F
from TableA
where D in ('MSD_CHANGE','MSD_CMT_CHANGE')


如果字段D包含
MSD\u CMT\u CHANGE
excel语言中的另一个单词E1=E2

目前,我从SQL中获取查询数据,并在Excel中运行脚本来执行此操作。
如果我可以在SQL中执行,它将减少我的工作负载

VBA代码:

Sub Test
    Dim rng as Range, cl as Range

    Set rng = Range("D2:D" & Range("D" & Rows.Count).End(xlUp).Row)

    For each cl in rng
       If cl = "MSD_CMT_CHANGE" AND cl.Offset(-1, 0) = "MSD_CHANGE" Then
           cl.Offset(-1, 1) = cl.Offset(0, 1)
       End If
    Next cl
End Sub
解释

if field_D = MSD_CMT_CHANGE then  

   compare row above it if equal "MSD_CHANGE" then 

        cell E1 = E2.
我有5000多行数据


查看下面的图像以获得更好的解释。

我假设有一列(在我的示例中,该列是
id
)您按顺序排列数据以获得列
D
,如下所示

A    D            
------------------
1 MSD_CHANGE
-----------------
2 MSD_CMT_CHANGE
-----------------
3 MSD_CMT_CHANGE
-----------------
4 MSD_CHANGE
在本例中,ID是按其排序数据的列

select id
      , d
      , decode(d, 'MSD_CHANGE', 
               decode(lead(d, 1, d) over(order by id), 'MSD_CMT_CHANGE', 
                      lead(e, 1, e) over(order by id) , e 
                      ) 
              ,e) e
  from t1
  order by id

这是一个

您按哪个列排序数据?是否有ID或其他列?显然你不能按D列排序。我是按A列排序。对不起,我不明白你所说的ID是什么意思,A列有6位数字格式的订单。非常感谢,我知道我以前应该在问题中提到,但我如何同时查看A列,因为A列中的订单ID必须相同,不想和其他订单混在一起。你说同时看A栏是什么意思?列A(在本例中为id)首先显示在查询结果中。这意味着列A必须具有相同的id,它是按A排序的,如果第1行A第2行A,则不执行所有操作。因此,如果第A3行和第A4行具有相同的orderID,那么所有这些内容,
MSD_CHANGE
MSD_CMT_CHANGE
必须属于相同的orderID(columnA),这只是一个示例。我不知道你的A专栏有什么价值,因为你没有告诉我。我假设要得到D列的值,你必须按其他列排序,而不是D列同样,这只是一个例子。,