【发布时间】:2014-08-24 13:02:30
【问题描述】:
我希望使用一个 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
【问题讨论】:
-
您假设行的特定顺序,但 SQL 表表示无序集。你有一个单独的列来指定行的顺序吗?
-
不,这是我的问题。我打算计算使用它来选择的行号,但它并不总是需要选择的同一行。因此,我只想为每个唯一 ID 显示 1 一次。
-
在这种情况下,@ClodoaldoNeto 的解决方案应该可以满足您的需求。您需要为其添加一个
order by子句,因此它的部分内容为partition by id order by id。
标签: sql postgresql case distinct-values