我想创建一个 Y/N 标志。如果相同帐户之一以 M 结尾,则标记为 N,如果所有帐户都以 D 结尾,则标记为 Y
I want to create a Y/N flag. If one of the same accounts ends in M then mark as N else Y if all ends with D
SELECT
SUBSTR(ACCOUNT,6,1) = 'M' THEN 'N' ELSE 'Y' END AS POSTING_FLAG 的情况
来自 ALL_QUEUES
期望的输出:
帐号标志
12345D N
12345D N
12345D N
12345M N
22222D Y
22222D Y
22222D Y
22222D Y
可以使用解析函数;这使用 CTE 仅通过帐户提供您的基础数据:
with all_queues (account) as (
select '12345D' from dual
union all select '12345D' from dual
union all select '12345D' from dual
union all select '12345M' from dual
union all select '22222D' from dual
union all select '22222D' from dual
union all select '22222D' from dual
union all select '22222D' from dual
)
select account,
case max(substr(account, -1))
over (partition by substr(account, 1, length(account) - 1))
when 'M' then 'N' else 'Y' end as posting_flag
from all_queues;
ACCOUNT POSTING_FLAG
------- ------------
12345D N
12345D N
12345D N
12345M N
22222D Y
22222D Y
22222D Y
22222D Y
8 rows selected.
如果帐户真的总是七个字符,那么您可以简化分区子字符串。
SELECT SUBSTR(ACCOUNT,6,1) = 'M' THEN 'N' ELSE 'Y' END AS POSTING_FLAG 的情况 来自 ALL_QUEUES
期望的输出:
帐号标志
12345D N
12345D N
12345D N
12345M N
22222D Y
22222D Y
22222D Y
22222D Y
可以使用解析函数;这使用 CTE 仅通过帐户提供您的基础数据:
with all_queues (account) as (
select '12345D' from dual
union all select '12345D' from dual
union all select '12345D' from dual
union all select '12345M' from dual
union all select '22222D' from dual
union all select '22222D' from dual
union all select '22222D' from dual
union all select '22222D' from dual
)
select account,
case max(substr(account, -1))
over (partition by substr(account, 1, length(account) - 1))
when 'M' then 'N' else 'Y' end as posting_flag
from all_queues;
ACCOUNT POSTING_FLAG
------- ------------
12345D N
12345D N
12345D N
12345M N
22222D Y
22222D Y
22222D Y
22222D Y
8 rows selected.
如果帐户真的总是七个字符,那么您可以简化分区子字符串。