仅查询sql server中唯一的行

仅查询sql server中唯一的行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有这样的桌子: Serial IO ---------------------------------------------------- 1 i 2 i 3 i 1 o 预期结果:在IO列中没有o的所有序列 Serial IO ----------------------------------------------------- 2 i 3

我有这样的桌子:

 Serial      IO
----------------------------------------------------
    1       i
    2       i
    3       i
    1       o
预期结果:在
IO
列中没有
o
的所有序列

 Serial      IO
-----------------------------------------------------
    2       i
    3       i

例如,串行
1
IO
列中既有
i
又有
o
,这就是它不出现在结果窗格中的原因。

您可以使用
不存在

select serial, io
from t
where not exists (select 1 from t t2 where t2.serial = t.serial and t2.io = 'o');
只是一种方式:

WITH i_table AS (SELECT serial,IO FROM my_table WHERE IO = 'i'),
o_table AS (SELECT serial,IO FROM my_table WHERE IO = 'o')
SELECT DISTINCT i.* 
FROM i_table AS i 
    LEFT JOIN o_table AS o 
    ON i.serial = o.serial 
WHERE o.serial IS NULL;

不存在
,类似的方法也有效。根据使用windows/分析函数的索引,可能会有不同的性能配置文件

WITH
  sized AS
(
  SELECT
    yourTable.*,
    COUNT(*) OVER (PARTITION BY IO)   AS group_size
  FROM
    yourTable
)
SELECT
  *
FROM
  sized
WHERE
  group_size = 1
试试下面的代码

select t.Serial,t.IO from table1 t inner join 
(select Serial from table1 group by Serial 
having count(distinct IO) = 1) t2 ON t.Serial = t2.Serial
where t.IO != 'o'
试试这个:

select distinct * from MY_TABLE
where [Serial] not in (select [Serial] from MY_TABLE where [IO] = 'o')

您可以左键联接并排除具有匹配项的对象

SELECT
  a.Serial,
  a.[IO]
FROM <table> a
LEFT JOIN
  <table> b
ON a.Serial = b.Serial
  and b.[IO] = 'o'
WHERE
  a.[IO] = 'i' 
  and b.[IO] is null
选择
a、 连载,
a、 [IO]
从
左连接
B
a.串行=b.串行
和b[IO]=“o”
哪里
a、 [IO]=“我”
并且b[IO]为空

不是最有效的,而是最短的

select Serial, io  from table where 'io' = 'i'
except 
select Serial, 'i' from table where 'io' = 'o'

Op提到了独特的行。如果一个序列号能够多次出现
i
,此解决方案将出错。@t-clausen.dk我在MatBailie的评论后编辑。@MatBailie Right。我已经修好了。@MatBailie一部连续剧每部连续剧只能有一个“I”。这样就行了这里的重要功能是什么<代码>唯一或
在IO列中没有“o”
?序列号是否可以有
i
多次,并因其不是唯一的而被排除在外?序列号只能出现一次,IO为
o
,因此是唯一的,因此可以包含在内吗?等等…连续剧能让我不止一次吗?不,它是唯一的。这将包括任何序列号具有唯一值的序列号,但不一定排除带有“O”@t-clausen.dk-同意的序列号。这符合OP的标题。在要求澄清之后,即使澄清是模糊的/不完整的,所以我保留原样。“IO列中没有o的所有序列”对我来说是清楚的