2017-02-15 219 views
0

我有這樣的查詢,需要幫助建立一個SQL

SELECT DISTINCT X,Y,Z from ABC; 

假設它產生的結果一樣,

  X    | Y | Z 
------------------------|--------|------ 
a/b/c/34y3bkfoi   | Data1 | Data2 
a/b/c/56egdhdhh   | Data1 | Data2 
a/b/c/h5747858i   | Data1 | Data2 
a/b/c/657sgsr65   | Data1 | Data2 
x/y/z/67dhgg45h   | Data1 | Data2 
x/y/z/6hd467ydh   | Data1 | Data2 

現在我想小組第一列的只有高達的數據「一/公元前'。我不在乎其他的東西。

或簡單地把我想DISTINCT必須應用於特定的上下文'%/%/%/'。

預期結果:

 X  | Y | Z 
------------|--------|------ 
a/b/c/  | Data1 | Data2 
x/y/z/  | Data1 | Data2 

任何建議?

+1

您使用的是MS SQL Server或MySQL或Oracle ...不標記隨機dbms產品。只標記你正在使用的那個。 – jarlh

+0

使用該表格數據,指定預期結果! – jarlh

+0

是否只有a/b/c或者a/a/b? –

回答

1

您可以使用SUBSTR與INSTR這樣的:

select substr(X, 1, Instr(X, '/', -1) - 1) as X1, substr(X, Instr(X, '/', -1) + 1) as X2, Y, Z 
from 
(select 'a/b/c/35235235' as X, 'Data1' as Y, 'Data2' as Z from dual); 

輸出爲:

X1 | X2  | Y | Z 
------------------------------ 
'a/b/c'|'35235235'|Data1|Data2 

那麼你group by X1

+0

我想,這會做。我會努力工作,並回復 – Codewarrior

+0

感謝您的提示。我得到了預期的產出。 – Codewarrior

+0

你能將我的答案標記爲答案嗎? ^。^ –

1

這是你所需要的?

SELECT DISTINCT X,Y,Z from ABC WHERE X LIKE 'a/b/c/%' 
0

使用DISTINCTLEFT

SELECT DISTINCT LEFT(X, 6) 
     -- Uncomment if you need 2nd and 3rd column as well 
     --,Y 
     --,Z 
FROM ABC 
+0

我想你錯過了Y和Z'SELECT'條款 – Petaflop

0

試試這個:

SELECT X, Y, Z, t.i, 
     LEFT(X, LEN(X) - t.i + 1), 
     RIGHT(X, t.i - 1) 
FROM ABC 
CROSS APPLY (SELECT CHARINDEX('/', REVERSE(X))) AS t(i) 

要選擇不同,您可以使用ROW_NUMBER

;WITH CTE AS (
    SELECT X, Y, Z, t.i, 
      LEFT(X, LEN(X) - t.i + 1) AS l, 
      RIGHT(X, t.i - 1) AS r, 
      ROW_NUMBER() OVER (PARTITION BY LEFT(X, LEN(X) - t.i + 1) 
           ORDER BY X) AS rn 
    FROM ABC 
    CROSS APPLY (SELECT CHARINDEX('/', REVERSE(X))) AS t(i) 
) 
SELECT 
FROM CTE 
WHERE rn = 1 
+0

感謝您的努力 – Codewarrior

0

謝謝你們。 我得到了預期的輸出使用,

SELECT DISTINCT(SUBSTR(X,1,INSTR(X,'/',1,3))),Y,Z from ABC;