列の値がアルファ、アゼラ、ベータ、ブラウン、チャーリー、クリングのテーブルがある場合
alphaの「al」がazeraの最初の「az」であるため、azera、brown、clingなどの値を取得するにはどうすればよいですか.. SQL 2005でこれを使い始めました。
Select top 1 columnA from TableA order by ColumnA desc
結果は1つしか得られませんが、アルファベットABとCごとに取得する必要があります.
前もって感謝します
列の値がアルファ、アゼラ、ベータ、ブラウン、チャーリー、クリングのテーブルがある場合
alphaの「al」がazeraの最初の「az」であるため、azera、brown、clingなどの値を取得するにはどうすればよいですか.. SQL 2005でこれを使い始めました。
Select top 1 columnA from TableA order by ColumnA desc
結果は1つしか得られませんが、アルファベットABとCごとに取得する必要があります.
前もって感謝します
あなたの質問は少し不明確ですが、各開始文字の最大値 (アルファベット順に並べ替えた場合) が必要であると想定しています。つまり、辞書の場合、 の最後のエントリa
、 の最後のエントリb
などを取得します。その場合は、次を試してください。
SELECT MAX(myCol)
FROM myTable
GROUP BY LEFT(myCol,1)
「アルファベット」とは「最初の文字」を意味すると推測します。次を使用してこれを解決できますrow_number()
。
select columnA
from (select columnA,
row_number() over (partition by left(columnA, 1) order by columnA desc) as seqnum
from TableA
) t
where seqnum = 1
order by columnA
最初の文字で分割し、文字ごとに 1 つの単語を取得するとします。
CTE
withRow_Number
関数を使用できます。
WITH cte
AS (SELECT ColumnA,
rn=Row_number()
OVER(
partition BY Substring(ColumnA, 1, 1)
ORDER BY ColumnA DESC)
FROM TableA)
SELECT *
FROM cte
WHERE rn = 1
結果:
azera
brown
cling