📄 Tam SQL Kodu (Referans)
Analiz eklerken buradan kod parçalarını kopyalayabilirsiniz
CREATE PROCEDURE [dbo].[sp_ArgeVeB2BArama]
@arananKod VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
-----------------------------------------------------------------------
-- 1) @arananKod'u '/' ile SIRALI sekilde parçaliyoruz (OPENJSON ile)
-- Örn: '22204-22010/22204-0C020/0L010' -> 3 alt kod (sirali)
-----------------------------------------------------------------------
DECLARE @json nvarchar(max);
SET @json = N'["'
+ REPLACE(
REPLACE(
REPLACE(
REPLACE(@arananKod, '"', '\"'),
'/', '","'), -- '/' ayirici
CHAR(13), '","'), -- CR
CHAR(10), '","') -- LF
+ N'"]';
;WITH SplittedCodes AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY [key]) AS KodSira,
LTRIM(RTRIM([value])) AS Kod
FROM OPENJSON(@json)
WHERE LTRIM(RTRIM([value])) <> ''
)
-----------------------------------------------------------------------
-- 2) Bir önceki kodu bulmak için LAG (kisa kodlar için prefix türetecegiz)
-----------------------------------------------------------------------
,CodesWithPrev AS
(
SELECT
KodSira,
Kod,
LAG(Kod, 1, NULL) OVER (ORDER BY KodSira) AS PrevKod
FROM SplittedCodes
)
-----------------------------------------------------------------------
-- 3) Kisa kod düzeltmesi (<=5 karakter):
-- Önceki koddaki '-' öncesini al + '-' + kisaKod
-- Ör: Prev: '22204-0N010', Kisa: '0L010' ? '22204-0L010'
-----------------------------------------------------------------------
,FinalCodes AS
(
SELECT
KodSira,
CASE
WHEN LEN(C.Kod) <= 5
AND C.PrevKod IS NOT NULL
AND CHARINDEX('-', C.PrevKod) > 0
THEN
LEFT(C.PrevKod, CHARINDEX('-', C.PrevKod) - 1)
+ '-'
+ C.Kod
ELSE
C.Kod
END AS KodFinal
FROM CodesWithPrev C
)
-----------------------------------------------------------------------
-- 4) ARGE / KARA LISTE / B2B / YOLDA kontrolleri
-- ARGE ve KARA LISTE tarafinda '-' ve '/' farklarini tolere ediyoruz.
-- ST2.OEM ve ST3.OEM içindeki tokenlari da ('/’ ile ayrilmis) tek tek
-- kontrol ediyoruz (OPENJSON ile).
-----------------------------------------------------------------------
,AramaSonuclari AS
(
SELECT
FC.KodSira,
FC.KodFinal,
/* ARGE kontrolü (TYPE_=2) – '-' ve '/' farklarini tolere et + token bazli kontrol */
ARGE = CASE
WHEN ST2.OEM IS NOT NULL THEN 'VAR'
ELSE 'YOK'
END,
/* B2B (B2B tablosunda var mi?) */
B2B = CASE
WHEN BPL.Ref IS NOT NULL THEN 'VAR'
ELSE 'YOK'
END,
/* B2B hangi sütunda bulundu? (CODE mi PRODUCERCODE mu?) */
B2B_KOLONU = CASE
WHEN BPL.Ref IS NOT NULL
AND
(
BPL.SicilKodu LIKE '%'+FC.KodFinal+'%'
OR REPLACE(BPL.SicilKodu, '-', '') LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
)
THEN 'CODE'
WHEN BPL.Ref IS NOT NULL
AND
(
BPL.ProducerCode LIKE '%'+FC.KodFinal+'%'
OR REPLACE(BPL.ProducerCode, '-', '') LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
)
THEN 'PRODUCERCODE'
ELSE 'BULUNAMADI'
END,
/* Eslesme varsa B2B tablosundaki CODE (SicilKodu) degerini ESDEGER olarak set et */
ESDEGER = CASE WHEN BPL.Ref IS NOT NULL
THEN BPL.SicilKodu
ELSE NULL
END,
MALZEME = CASE WHEN BPL.Ref IS NOT NULL
THEN BPL.Aciklama
ELSE NULL
END,
/* KARA LISTE kontrolü (TYPE_=3) – '-' ve '/' farklarini tolere et + token bazli */
KARA_LISTE = CASE
WHEN ST3.OEM IS NOT NULL THEN 'VAR'
ELSE 'YOK'
END,
/* STOK_RAPOR_YOLDA kontrolü – '-' ve '/' farklarini tolere et */
YOLDA = CASE
WHEN SRW.[OEM1] IS NOT NULL THEN 'VAR'
ELSE 'YOK'
END
FROM FinalCodes AS FC
/* ================= ARGE kontrolü ================= */
LEFT JOIN IHR.dbo.SablonTablosu AS ST2
ON ST2.TYPE_ = 2
AND ST2.DEL = 0
AND (
-- ham LIKE
ST2.OEM LIKE '%'+FC.KodFinal+'%'
-- '-' farkini yok say
OR REPLACE(ST2.OEM, '-', '')
LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
-- hem '-' hem '/' farkini yok say
OR REPLACE(REPLACE(ST2.OEM, '-', ''), '/', '')
LIKE '%'+REPLACE(REPLACE(FC.KodFinal, '-', ''), '/', '')+'%'
-- ST2.OEM içindeki token'lari ('/') ayirarak tek tek karsilastir
OR EXISTS (
SELECT 1
FROM OPENJSON( N'["' + REPLACE(REPLACE(ST2.OEM, '"','\"'), '/', '","') + N'"]' ) AS tok
WHERE tok.[value] LIKE '%'+FC.KodFinal+'%'
OR REPLACE(tok.[value], '-', '')
LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
)
)
/* ================ KARA LISTE kontrolü ================ */
LEFT JOIN IHR.dbo.SablonTablosu AS ST3
ON ST3.TYPE_ = 3
AND ST3.DEL = 0
AND (
ST3.OEM LIKE '%'+FC.KodFinal+'%'
OR REPLACE(ST3.OEM, '-', '')
LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
OR REPLACE(REPLACE(ST3.OEM, '-', ''), '/', '')
LIKE '%'+REPLACE(REPLACE(FC.KodFinal, '-', ''), '/', '')+'%'
OR EXISTS (
SELECT 1
FROM OPENJSON( N'["' + REPLACE(REPLACE(ST3.OEM, '"','\"'), '/', '","') + N'"]' ) AS tok
WHERE tok.[value] LIKE '%'+FC.KodFinal+'%'
OR REPLACE(tok.[value], '-', '')
LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
)
)
/* =================== B2B kontrolü =================== */
LEFT JOIN UNIVERSALDB.dbo.B2B_PRODUCT_LISTS AS BPL
ON BPL.SicilKodu LIKE '%'+FC.KodFinal+'%'
OR BPL.ProducerCode LIKE '%'+FC.KodFinal+'%'
OR REPLACE(BPL.SicilKodu, '-', '') LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
OR REPLACE(BPL.ProducerCode, '-', '') LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
/* ================== YOLDA kontrolü ================== */
LEFT JOIN UNIVERSALDB.dbo.STOK_RAPOR_YOLDA AS SRW
ON SRW.[OEM1] LIKE '%'+FC.KodFinal+'%'
OR REPLACE(SRW.[OEM1], '-', '') LIKE '%'+REPLACE(FC.KodFinal, '-', '')+'%'
OR REPLACE(REPLACE(SRW.[OEM1], '-', ''), '/', '')
LIKE '%'+REPLACE(REPLACE(FC.KodFinal, '-', ''), '/', '')+'%'
)
-----------------------------------------------------------------------
-- 5) Öncelik sirasi:
-- 1) ARGE=VAR ve B2B=VAR
-- 2) ARGE=VAR veya B2B=VAR (ama ikisi birden degil)
-- 3) ARGE=YOK ve B2B=YOK
-----------------------------------------------------------------------
,Oncelikli AS
(
SELECT
KodSira,
KodFinal,
ARGE,
B2B,
B2B_KOLONU,
ESDEGER,
MALZEME,
KARA_LISTE,
YOLDA,
Priority = CASE
WHEN ARGE='VAR' AND B2B='VAR' THEN 1
WHEN ARGE='VAR' OR B2B='VAR' THEN 2
ELSE 3
END
FROM AramaSonuclari
)
-----------------------------------------------------------------------
-- 6) En yüksek öncelikli (Priority ASC) ve esitlikte en erken KodSira
-----------------------------------------------------------------------
SELECT TOP 1
@arananKod AS ARANAN
,ARGE
,B2B
,B2B_KOLONU
,ESDEGER
,MALZEME
,KARA_LISTE
,YOLDA
FROM Oncelikli
ORDER BY Priority, KodSira;
END
➕ Yeni Kod Analizi Ekle
📋 Mevcut Analizler (0)
Henüz kod analizi eklenmemiş.
Yukarıdaki formu kullanarak ilk analizi ekleyin.