我不确定这是否可以在SQL Query中完成。我可以做到EXCEL。
的查询
SELECT
A,
B,
C,
D,
E,
F
from TableA
where D in ('MSD_CHANGE','MSD_CMT_CHANGE')
sheet http://i49.tinypic.com/1enm7m.jpg
如果字段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行数据。
检查下面的图像以获得更好的解释。
答案 0 :(得分: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
这是DEMO