如果是单条记录,不适用where条件;如果是多条记录,应用where条件,返回单条记录
Posted
技术标签:
【中文标题】如果是单条记录,不适用where条件;如果是多条记录,应用where条件,返回单条记录【英文标题】:In case of single record, don't apply where condition; In case of multiple records, apply where condition and return single record 【发布时间】:2017-04-12 07:09:07 【问题描述】:我的查询是关于 SQL 的。
我有一个包含多条记录的表,其中“ID 号”列可能重复。为了消除重复,我们设置了一个 where 条件,比如如果帐号为空,则不显示记录。但这是跳过只有记录而没有帐号的记录。
如果只存在一条记录,我们不希望应用 where 条件。如果存在多条记录,则仅适用于 where 条件。
请提供帮助。
示例表如下:
ID number Name Account number Country
123456 Sam 100034 China
156789 Nicky 100045 Russia
156789 Nicky Russia
453638 John Peru
564433 Bret 100035 Alaska
132323 Peter 100067 Slovenia
我需要上表中的所有唯一值。因此,我设置了 where 条件以不返回帐号为空的记录。因此,它返回 ID 号 156789 的一条记录,但跳过 ID 号 453638。因此,如果该 ID 号仅存在一条记录,则不应应用条件。希望我的问题很清楚。
【问题讨论】:
请Edit您的问题并添加表定义(如create table
语句)、一些示例数据和基于该数据的预期输出。 Formatted text 请no screen shots。 edit 您的问题不要在 cmets 中发布代码或其他信息。
我们不需要打字练习。请插入样本数据、预期结果、表格结构等作为文本,最好是代码,我们可以将其复制并粘贴到我们自己的工具中,以便在我们自己的机器上重新创建您的样本。
DBMS 是 Oracle。
spaghettidba.com/2015/04/24/…
“'ID 号'列可能重复”总是让我崩溃。
【参考方案1】:
尝试像这样使用count(*)
over
(partition by
...)`
select * from (
select m.*,
count(*) over (partition by m.[ID number]) cnt
from MyTable as m) sel
where sel.cnt = 1
or sel.[Account number] is not null
【讨论】:
可能您应该指定外部投影的列,因为select * from (
也将包含业务意义无关的sel
。以上是关于如果是单条记录,不适用where条件;如果是多条记录,应用where条件,返回单条记录的主要内容,如果未能解决你的问题,请参考以下文章