如果是单条记录,不适用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条件,返回单条记录的主要内容,如果未能解决你的问题,请参考以下文章

mybatis学习记录------2

如何在oracle数据表中一次性插入多条记录?

如何在oracle数据表中一次性插入多条记录?

使用 SQL 根据单条记录的更改对多条记录进行更改

从可能产生多条记录的连接表中获取单条记录

如何检查传入的 JSON 提要是不是包含单条记录或多条记录?