2016-03-22 20 views
0

Saha Adı bu tablo var almak için:SQL Server: Sorgu büyük isim satırları

kısa adı kötü
TABLE 

Name      WANTED: 
----------------- 
Done      This 
Barcel 
Barcelona     This 
Paris 
Parisinos     This 

. Bu dosyalara ihtiyacım yok

SQL sunucusundaki sorgu hangisidir?

cevap

1

Yinelenen dosyaların nasıl işleneceğini bilmiyor, ancak bu istediğiniz sonuçları üretiyor.

DECLARE @Name TABLE (
    Name VARCHAR(20) 
) 

INSERT INTO @Name SELECT 'Done' 
INSERT INTO @Name SELECT 'Barcel' 
INSERT INTO @Name SELECT 'Barcelona' 
INSERT INTO @Name SELECT 'Paris' 
INSERT INTO @Name SELECT 'Parisinos' 

DELETE t2 
from @Name t1 
INNER JOIN @Name t2 ON t1.Name LIKE t2.Name + '%' 
    AND t1.Name<>t2.Name 

SELECT * FROM @Name 
+0

Bu sorguyu çalıştırdım ve veritabanımda çalışıyor. 'done' adı için de mi düşünüldü? 'done' doğru sonuçtur – David

+0

Hayır, anlatabildiğim kadarıyla "Bitti" ifadesini içermez. '%' Inin "0" fazla karakterin de eşleşebileceğine inanıyorum. Silmek için en az bir karakter olduğundan emin olmak istersiniz –

+0

https://msdn.microsoft.com/en-us/library/ms179859.aspx. Temelde '_%' yap –

1

Bu veriler için çalışacak sahip:

NUMUNE VERİ:

IF OBJECT_ID('tempdb..#Names') IS NOT NULL 
    DROP TABLE #Names; 

CREATE TABLE #Names(Name VARCHAR(100)); 

INSERT INTO #Names 
VALUES 
     ('Done'), 
     ('Barcel'), 
     ('Barcelona'), 
     ('Paris'), 
     ('Parisinos'); 

SORGU:

WITH CTE 
    AS (SELECT A.Name 
      , B.Name AS B_NAME 
      , ROW_NUMBER() OVER(PARTITION BY B.Name ORDER BY A.Name DESC) AS RN 
     FROM #Names AS A 
      LEFT OUTER JOIN #Names AS B ON A.Name LIKE B.Name+'%') 
    SELECT DISTINCT 
      Name 
    FROM CTE 
    WHERE RN = 1; 

BULGULAR:

enter image description here

Ama şu varsa:

IF OBJECT_ID('tempdb..#Names') IS NOT NULL 
    DROP TABLE #Names; 

CREATE TABLE #Names(Name VARCHAR(100)); 

INSERT INTO #Names 
VALUES 
     ('Done'), 
     ('Barcel'), 
     ('Barcelona'), 
     ('Paris'), 
     ('Parisinos'), 
     ('Parisians'); 

Üstesinden istiyorum emin değilim.