SQL Server:查找非重复项
我在SQL Server中有一个如下所示的表:SQL Server:查找非重复项,sql,sql-server,unique,distinct,Sql,Sql Server,Unique,Distinct,我在SQL Server中有一个如下所示的表: id filename size --------------------- 1 abc.aaa 0 2 abc.zip 123 3 def.aaa 0 4 def.zip 124 5 ghi.zip 123 6 jkl.aaa 0 7 jkl.zip 124 8 mno.zip 234 9 pqr.aaa 0 10 pqr.zi
id filename size
---------------------
1 abc.aaa 0
2 abc.zip 123
3 def.aaa 0
4 def.zip 124
5 ghi.zip 123
6 jkl.aaa 0
7 jkl.zip 124
8 mno.zip 234
9 pqr.aaa 0
10 pqr.zip 345
我需要找到具有唯一文件名且扩展名为“不带”的行
所以结果应该是
id filename size
---------------------
4 def.zip 124
8 mno.zip 234
我试过使用
select distinct (Left(filename, LEN(filename) - 4
from tbl
但它返回的是abc、def、ghi、jkl等
我怎样才能得到我想要的结果?也许这会给你想要的答案:
select id
, filename
, size
from (
select max(id) id
, max(filename) filename
, max(size) size
, Left(filename, LEN(filename) - 4) file_name
, count(Left(filename, LEN(filename) - 4)) count_column
from testTable
group by Left(filename, LEN(filename) - 4)
having count(Left(filename, LEN(filename) - 4)) = 1) as t1;
以下是
不存在的:
select t.* from tablename t
where not exists (
select 1 from tablename
where id <> t.id
and left(filename, charindex('.', filename)) = left(t.filename, charindex('.', t.filename))
)
请参阅。
结果:
如果预期结果不正确,一种方法是使用CTE和计数
:
WITH CTE AS(
SELECT id,
[filename],
size,
COUNT(id) OVER (PARTITION BY LEFT([filename],NULLIF(CHARINDEX('.',[filename]),0))) AS [Count]
FROM YourTable)
SELECT id,
[filename],
size
FROM CTE
WHERE [Count] = 1;
使用Forpas的样本数据:为什么预期结果不包含id=5的行?为什么结果中包含id=4的行?因为有'def.zip'和'def.aaa'?抱歉,ghi.zip和mno.zip是我追求的唯一值。
> id | filename | size
> -: | :------- | ---:
> 5 | ghi.zip | 123
> 8 | mno.zip | 234
WITH CTE AS(
SELECT id,
[filename],
size,
COUNT(id) OVER (PARTITION BY LEFT([filename],NULLIF(CHARINDEX('.',[filename]),0))) AS [Count]
FROM YourTable)
SELECT id,
[filename],
size
FROM CTE
WHERE [Count] = 1;