Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:查找非重复项_Sql_Sql Server_Unique_Distinct - Fatal编程技术网

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

我在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.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;