我试图通过策略no拆分一组数据,并根据一组条件设置一个标志,并且我遇到了逻辑问题。
数据如下:
Policy_no, role
1 , 'Owner'
1 , 'Beneficiary'
1 , 'Beneficiary'
2 , 'Owner'
2 , 'Life assured'
3 , 'Life assured'
所以我试图通过policy_no分割数据,这样如果有所有者,则标志设置为' 1'但是如果没有所有者,则设置标志如果life_assured存在,但旗帜不能是' y'对于所有者和life_assured。
IE:
Policy_no, role, flag
1 , 'Owner' ,1
1 , 'Beneficiary' ,0
1 , 'Beneficiary' ,0
2 , 'Owner' ,1
2 , 'Life assured 1' ,0
3 , 'Life assured 1' ,1
3 , 'Life assured 2' ,1
4 , 'Beneficiary' ,0
我将标题设置为按唯一键分区,因为这是我正在尝试的内容,但目前无济于事。然而,我愿意接受新的想法。
编辑:抱歉,这是针对oracle dbms的。 编辑2:添加更多数据以展示不同的可能性。由于
答案 0 :(得分:0)
使用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
)
DEMO For Oracle
使用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演示
答案 1 :(得分:0)
我在我的演示中添加了一些数据来测试所有规则:
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
SQL Server演示:http://sqlfiddle.com/#!18/9eecb/11009