0

我不确定这是否可以在 SQL Query 中完成。我可以做到EXCEL。

询问

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


床单

如果字段 D 包含MSD_CMT_CHANGE然后在上面和右边的行中 1 = 7866 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 行数据。

检查下面的图片以获得更好的解释。

4

1 回答 1

1

我假设有一列(在我的示例中,该列是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

这是一个演示

于 2012-09-19T16:55:48.383 回答