次のレコードを表す必要があります
DATA
000200AA
00000200AA
000020BCD
00000020BCD
000020ABC
なので
DATA CNT
200AA 1
20BCD 2
20ABC 2
何か案は?
次のレコードを表す必要があります
DATA
000200AA
00000200AA
000020BCD
00000020BCD
000020ABC
なので
DATA CNT
200AA 1
20BCD 2
20ABC 2
何か案は?
パトインデックスを使用
select count(test) as cnt,
substring(test, patindex('%[^0]%',test),len(test)) from (
select ('000200AA') as test
union
select '00000200AA' as test
union
select ('000020BCD') as test
union
select ('00000020BCD') as test
union
select ('000020ABC') as test
)ty
group by substring(test, patindex('%[^0]%',test),len(test))
素敵な再帰的なユーザー定義関数はどうですか?
CREATE FUNCTION dbo.StripLeadingZeros (
@input varchar(MAX)
) RETURNS varchar(MAX)
BEGIN
IF LEN(@input) = 0
RETURN @input
IF SUBSTRING(@input, 1, 1) = '0'
RETURN dbo.StripLeadingZeros(SUBSTRING(@input, 2, LEN(@input) - 1))
RETURN @input
END
GO
それで:
SELECT dbo.StripLeadingZeros(DATA) DATA, COUNT(DATA) CNT
FROM YourTable GROUP BY dbo.StripLeadingZeros(DATA)
値を取得するために必要なものに応じて、このコードは異なる場合があります。
Barry が提案したように単純な右 5 文字を想定すると、RIGHT(data, 5) と GROUP BY と COUNT を使用して結果を取得できます
DECLARE @String VARCHAR(32) = N'000200AA'
SELECT SUBSTRING ( @String ,CHARINDEX(N'2', @String),LEN(@String))
STUFF関数を見てみましょう
範囲の文字列にデータを挿入します
次のクエリを実行できます。
SELECT RIGHT([DATA],LEN[DATA])-PATINDEX('%[1-9]%',[DATA])+1) [DATA], COUNT(*) CNT
FROM YourTable
GROUP BY RIGHT([DATA],LEN[DATA])-PATINDEX('%[1-9]%',[DATA])+1)