Merhaba, elimde malzemeler ve o malzemelerle uyumlu araç ID’lerinin olduğu şöyle bir veri seti var:
MLZM-1 11111@22222@33333@44444
MLZM-2 55555@66666@77777@88888
MLZM-3 AAAAA@BBBBB@CCCCC@DDDDD
Bu veriden şöyle bir sonuç tablosu elde etmek istiyorum:
MLZM-1 11111
MLZM-1 22222
MLZM-1 33333
MLZM-1 44444
MLZM-2 55555
MLZM-2 66666
MLZM-2 77777
MLZM-2 88888
MLZM-3 AAAAA
MLZM-3 BBBBB
MLZM-3 CCCCC
MLZM-3 DDDDD
Bunun için aşağıdaki scripti kullandım.
SELECT b.MalzemeNo AS ItemNo
, t1.value AS AracId
FROM [MalzemeListesi] b WITH (NOLOCK)
CROSS APPLY master.dbo.fnSplitString(b.Araclar, '@') AS t1
WHERE t1.value <> ''
ORDER BY b.MalzemeNo
OPTION (MAXRECURSION 0); -- Maksimum dongu hatasi icin bunu sifir olarak ayarlamak lazim.
Script içerisinde geçen fonksiyon da bu:
CREATE FUNCTION [dbo].[fnSplitString](@str NVARCHAR(MAX), @sep NVARCHAR(5))
RETURNS TABLE
AS
RETURN
WITH a AS
(
SELECT CAST(0 AS BIGINT) AS idx1
, CHARINDEX(@sep, @str) idx2
UNION ALL
SELECT idx2 + 1
, CHARINDEX(@sep, @str, idx2 + 1)
FROM a
WHERE idx2 > 0
)
SELECT SUBSTRING(@str, idx1, COALESCE(NULLIF(idx2, 0), LEN(@str) + 1) - idx1) AS value
FROM a
Selamlar.