Sql 按唯一键分区,用大小写设置标志
我试图用策略no分割出一组数据,并根据一组条件设置一个标志,但我在逻辑上遇到了问题 数据如下:Sql 按唯一键分区,用大小写设置标志,sql,oracle,case,Sql,Oracle,Case,我试图用策略no分割出一组数据,并根据一组条件设置一个标志,但我在逻辑上遇到了问题 数据如下: Policy_no, role 1 , 'Owner' 1 , 'Beneficiary' 1 , 'Beneficiary' 2 , 'Owner' 2 , 'Life assured' 3 , 'Life assured' 因此,我尝试按保单号拆分数据,这样,如果有所有者,则标志设置为“1”,但是如果没有所有者,则如果有人寿保险,则标志设置为“1”,但对于所有者和人寿保险,标志不
Policy_no, role
1 , 'Owner'
1 , 'Beneficiary'
1 , 'Beneficiary'
2 , 'Owner'
2 , 'Life assured'
3 , 'Life assured'
因此,我尝试按保单号拆分数据,这样,如果有所有者,则标志设置为“1”,但是如果没有所有者,则如果有人寿保险,则标志设置为“1”,但对于所有者和人寿保险,标志不能都为“y”
即:
我将标题设置为“按唯一键分区”,因为这是我一直尝试的,但目前没有效果。然而,我对新想法持开放态度
编辑:抱歉,这是针对oracle dbms的。
编辑2:添加更多数据以显示不同的可能性
感谢您使用Oracle
SELECT Policy_no,
role,
CASE WHEN RN = 1 THEN
1
ELSE
0
END AS FLAG
FROM
(
SELECT Policy_no,
role,
Row_Number() Over (Partition BY Policy_no Order BY Policy_no) AS RN
FROM table1
)
Oracle演示版
SELECT Policy_no,
role,
CASE WHEN RN = 1 THEN
1
ELSE
0
END AS FLAG
FROM
(
SELECT Policy_no,
role,
Row_Number() Over (Partition BY Policy_no Order BY Policy_no) AS RN
FROM table1
)
使用MYSQL
SELECT Policy_no
, role
, FLAG
FROM
(
SELECT Policy_no
, role
, CASE WHEN @Policy_no != T.Policy_no
THEN 1
ELSE 0
END AS FLAG
,@Policy_no := T.Policy_no AS VarPolicy_no
FROM Table1 AS T,(SELECT @Row :=null,@Policy_no := -1) AS R
)AS T1
输出
Policy_no role FLAG
1 Owner 1
1 Beneficiary 0
1 Beneficiary 0
2 Owner 1
3 Life assured 1
MYSQL演示版
SELECT Policy_no
, role
, FLAG
FROM
(
SELECT Policy_no
, role
, CASE WHEN @Policy_no != T.Policy_no
THEN 1
ELSE 0
END AS FLAG
,@Policy_no := T.Policy_no AS VarPolicy_no
FROM Table1 AS T,(SELECT @Row :=null,@Policy_no := -1) AS R
)AS T1
我在演示中添加了一些数据来测试所有规则:
SELECT Policy_no
, role
, IIF(CASE
WHEN role = 'owner' THEN 1
WHEN role = 'Life assured' THEN 1
ELSE 0
END = 1
AND SUM(CASE
WHEN role = 'owner' THEN 1
WHEN role = 'Life assured' THEN 1
ELSE 0
END)
OVER (
Partition BY Policy_no ) < 2, 1, IIF(role = 'owner', 1, 0)) flag
FROM cte
ORDER BY Policy_no
选择策略\u否
角色
,IIF(个案)
当角色='所有者'时,则为1
当角色=‘人寿保险’时,则为1
其他0
结束=1
及总和(个案)
当角色='所有者'时,则为1
当角色=‘人寿保险’时,则为1
其他0
(完)
结束(
按策略分区(编号)<2,1,IIF(角色='owner',1,0))标志
来自cte
按保单编号订购
SQL Server演示:由于某些原因,这在我的toad版本中不起作用。它不喜欢关键字Row,你不能为你的第一个查询指定dbms吗?编辑了我的初始帖子,对混淆表示歉意。检查第一个答案它会起作用@EkulSregorThis确实起作用,但它不会将案例之外的设置为0。例如,如果受益人是保单的第一行,则会将其设置为所有者,这是不正确的。至少告诉我们这是用于哪个dbms的。