2017-02-15 23 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/bctですか? –

答えて

1

あなたはこのようなINSTRとSUBSTRを使用することができます。

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 

ますあなたがROW_NUMBERを使用することができます明確な選択するには

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) 

+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 yの 'SELECT'節がないと思います。 – Petaflop

0

はこれを試してみてください

;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; 
関連する問題