我有一张像这样的桌子
DateCol TaskID EventName
2017-09-25 10 A
2017-07-26 10 B
2017-07-27 10 A
2017-09-14 10 A
2017-07-25 10 B
2017-09-25 10 C
2017-09-28 11 A
2017-11-01 11 D
2017-11-01 11 C
.....数千行
我想要的是这样的输出:对于每个 TaskID,如果事件 A 和 C(不是任何其他组合)发生在同一天(来自 DateCol),则 EventName 列为“A+C”。所以在这种情况下它会显示
DateCol TaskID EventName
2017-09-25 10 A+C
2017-07-26 10 B
2017-07-27 10 A
2017-09-14 10 A
2017-07-25 10 B
2017-09-28 11 A
2017-11-01 11 D
2017-11-01 11 C
你可以看到这一行
2017-09-25 10 A
and
2017-09-25 10 C
现在是一排,
2017-09-25 10 A+C
但其他一切都没有改变。
我需要使用什么样的 SQL 语句来进行这样的调整?
假设:仅将 2 个不同的 EventName 合并为 1 个。
有点粗糙,但应该可以。
; with
cte as
(
select t.DateCol, t.TaskID,
t.EventName,
new_EventName =
case when t.EventName in ('A')
and max(t.EventName) over (partition by t.DateCol, t.TaskID) = 'C'
then 'A+C'
when t.EventName in ('C')
and min(t.EventName) over (partition by t.DateCol, t.TaskID) = 'A'
then 'A+C'
else NULL
end
from yourtable t
)
select distinct DateCol, TaskID, EventName = coalesce(new_EventName, EventName)
from cte
如果还有其他情况不起作用,请发布带有预期结果的示例数据
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)