我正在寻找一个case语句,它将为我列出的每个唯一ID返回一次数字1,如果ID与上面的ID相同则返回0。该列是一个文本列,当前具有“N”或“Y”。
以下是我的数据的示例。我想尽量缩短它,因为这将在其他SQL中使用。
SQL:select case when Value = 'Y' then 1 else 0 end
返回:
ID Value
48719 Y -- returns 1
48719 Y -- returns 1
48719 Y -- returns 1
55555 Y -- returns 1
我想看到什么。
ID Value
48719 Y -- return 1
48719 Y -- return 0
48719 Y -- return 0
55555 Y -- return 1
修改:
这也是一种可能的情况。对于第一个ID,我想让三行中的任何一行返回1,但是其他两行显示0.由于case语句将为第一行返回0,我可以让它只选择一个1对于具有该ID的所有行。
ID Value
48719 N -- returns 1
48719 Y -- returns 0
48719 Y -- returns 0
55555 Y -- returns 1
答案 0 :(得分:0)
select
id, value,
(
row_number() over(partition by id) = 1
)::integer as returned_value
from t