sql - 具有分析功能的 oracle 查询以根据条件设置行号
问题描述
你好,我写了一个查询,通过行号获取车辆数据,并进行一些操作。我已经写了一个条件,如果动作等于“IN”,那么在不同列中显示的行号和在不同列中显示的“OUT”行号,按密码分区。但是如果条件满足“OUT”相同的密码,我想重置行号这里是查询http://sqlfiddle.com/#!4/7e0d9/1的小提琴,这里是代码
SELECT
agent_id,
passnumber,
case
when action='IN' then
ROW_NUMBER() OVER(
PARTITION BY passnumber
ORDER BY
passnumber ASC
)
end AS rn_in,
case
when action='OUT' then
ROW_NUMBER() OVER(
PARTITION BY passnumber
ORDER BY
passnumber ASC
)
end AS rn_out
FROM
vehicle_log
我得到这样的结果
agent_id passnumber rn_in rn_out
======== ========== ===== ======
1 1214 1 null
1 1214 2 null
1 1214 null 3
但我应该是这样的
agent_id passnumber rn_in rn_out
======== ========== ===== ======
1 1214 1 null
1 1214 2 null
1 1214 null 1
你能告诉我我该怎么做吗?
解决方案
您必须将 Action 列添加到您的分区案例。你可以试试这段代码:
SELECT
agent_id,
passnumber,
case when action='IN' then
row_number() OVER(
PARTITION BY passnumber,action
ORDER BY
passnumber,action ASC
)
end AS rn_in, case
when action='OUT' then
row_number() OVER(
PARTITION BY passnumber,action
ORDER BY
passnumber,action ASC
)
end AS rn_out
FROM
vehicle_log
推荐阅读
- python - 是否有 NetworkX 算法可以找到从源到目标的最长路径?
- python - n 个变量之间的相等性
- c# - ASP.Net 无法将字节值添加到我的 SQL Server
- python - 从同级目录导入功能(__init__ 文件不起作用)
- tensorflow - Pre_trained model work well on ResNet, InceptionNet but unable to run on VGG16 and VGG19
- firebase - 更新firebase实时数据库xamarin表单中的单个数据
- c - 推广 For 和 Malloc 的大小 C
- r - 如何将颜色图例添加到具有不同几何图层的 ggplot?
- javascript - 在 vuex 中运行以下代码时未定义“mapGetters”
- python - 使用 dropna() 后获取 MultiIndex 级别 0 的名称