仅查询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的所有序列”对我来说是清楚的