• 10-10-2023, 11:11:26
    #1
    Merhabalar arkadaşlar büyük bir hata alıyorum çözümünü hiç bir türlü bulamadım yardımcı olursanız çok sevinirim.
    Aşağıdaki Kodda WHERE I.ACTIVE = 0 AND I.CARDTYPE = 1 filtrelemeyi LEFT JOIN aa as cG ON cG.KOD = I.LOGICALREF bunu eklediğim zaman yapmıyor çok saçma hiç bir çözüm bulamadım.
    WITH LastDate AS (
         SELECT S.STOCKREF,
           ISNULL(MAX(S.DATE_),'2022-01-01 00:00:00.000') AS MAX_DATE,
           S.AMOUNT AS adet
    FROM LG_123_01_STLINE S
    WHERE S.TRCODE = 1 AND S.LINETYPE = 0 AND S.CANCELLED = 0
          AND S.DATE_ = (SELECT MAX(DATE_) FROM LG_123_01_STLINE WHERE STOCKREF = S.STOCKREF AND TRCODE = 1 AND LINETYPE = 0 AND CANCELLED = 0)
    GROUP BY S.STOCKREF, S.AMOUNT
    ), aa AS (
      SELECT
        distinct(S.STOCKREF) as KOD,
        DATEDIFF(day,MAX(S.DATE_),GETDATE()) AS ISLEMGORMEYENGUN,
        MAX(S.DATE_) as SONSATIS,
        S.AMOUNT AS adet
    FROM LG_123_01_STLINE S
    WHERE S.TRCODE = 8 AND S.CANCELLED = 0 AND S.INVOICEREF <> 0
    GROUP BY S.STOCKREF,S.AMOUNT
    ),
     DEVIR AS (
    SELECT S.STOCKREF as STOCKREF,SUM(S.AMOUNT) as Devir FROM LG_123_01_STLINE S left join LG_123_ITEMS I on I.LOGICALREF = S.STOCKREF WHERE I.ACTIVE = 0 AND I.CARDTYPE = 1 AND S.LINETYPE =0 AND S.TRCODE = 14 AND S.CANCELLED =0  GROUP BY S.STOCKREF
    )
    SELECT
      I.LOGICALREF,
      I.CARDTYPE,
      I.ACTIVE,
      I.STGRPCODE,
      I.KEYWORD5,
      I.B2CCODE,
      I.CODE,
      I.NAME,
      I.IMAGEINC,
      G.ONHAND AS STOK
    FROM LG_123_ITEMS as I
    LEFT JOIN LV_123_01_GNTOTST G ON G.STOCKREF = I.LOGICALREF AND G.INVENNO = -1
    LEFT JOIN LG_123_PRCLIST P ON P.CARDREF = I.LOGICALREF AND P.PTYPE = 2 AND P.CLSPECODE = 'T01' AND P.ACTIVE = 0
    LEFT JOIN DEVIR as DV on DV.STOCKREF = I.LOGICALREF
    LEFT JOIN LastDate as LD on LD.STOCKREF = I.LOGICALREF
    LEFT JOIN aa as cG ON cG.KOD = I.LOGICALREF
    WHERE I.ACTIVE = 0 AND I.CARDTYPE = 1
  • 10-10-2023, 11:17:25
    #2
    ChatGpt Cevabı;



    Merhaba! Kodunuzda birkaç potansiyel sorun var gibi görünüyor. İlk olarak, DISTINCT anahtar kelimesini aa CTE'sinde kullanmanız gerekmeyebilir, çünkü zaten GROUP BY ifadesi kullanıyorsunuz. Ayrıca, DISTINCT ve GROUP BY kullanımını bir arada kullanmak bazen beklenmeyen sonuçlara yol açabilir.
    İkinci olarak, aa CTE'sindeki DATEDIFF fonksiyonunu ISLEMGORMEYENGUN sütununda kullanırken, bu sütunu DATEDIFF fonksiyonu içinde sadece bir kere kullanmanız daha iyi olabilir.
    Ayrıca, MAX(S.DATE_) ifadesini aa CTE'sinde kullanıyorsunuz, ancak bu tarih, LastDate CTE'sindeki MAX_DATE ile aynı mıdır? Eğer aynı değilse, bu iki tarihi birleştirmeniz veya uyumlu hale getirmeniz gerekebilir.
    Son olarak, WHERE koşulları arasında AND ve OR bağlaçlarını doğru bir şekilde kullanmalısınız. Bu, filtreleme mantığınızı gözden geçirmeniz gerektiği anlamına gelir.
    İşte düzenlenmiş bir versiyon:

    WITH LastDate AS (
         SELECT
           S.STOCKREF,
           ISNULL(MAX(S.DATE_),'2022-01-01 00:00:00.000') AS MAX_DATE,
           S.AMOUNT AS adet
         FROM
           LG_123_01_STLINE S
         WHERE
           S.TRCODE = 1 AND
           S.LINETYPE = 0 AND
           S.CANCELLED = 0 AND
           S.DATE_ = (SELECT MAX(DATE_) FROM LG_123_01_STLINE WHERE STOCKREF = S.STOCKREF AND TRCODE = 1 AND LINETYPE = 0 AND CANCELLED = 0)
         GROUP BY
           S.STOCKREF, S.AMOUNT
    ),
    aa AS (
      SELECT
        S.STOCKREF as KOD,
        DATEDIFF(day, MAX(S.DATE_), GETDATE()) AS ISLEMGORMEYENGUN,
        MAX(S.DATE_) as SONSATIS,
        S.AMOUNT AS adet
      FROM
        LG_123_01_STLINE S
      WHERE
        S.TRCODE = 8 AND
        S.CANCELLED = 0 AND
        S.INVOICEREF <> 0
      GROUP BY
        S.STOCKREF, S.AMOUNT
    ),
    DEVIR AS (
      SELECT
        S.STOCKREF as STOCKREF,
        SUM(S.AMOUNT) as Devir
      FROM
        LG_123_01_STLINE S
        LEFT JOIN LG_123_ITEMS I ON I.LOGICALREF = S.STOCKREF
      WHERE
        I.ACTIVE = 0 AND
        I.CARDTYPE = 1 AND
        S.LINETYPE = 0 AND
        S.TRCODE = 14 AND
        S.CANCELLED = 0
      GROUP BY
        S.STOCKREF
    )
    SELECT
      I.LOGICALREF,
      I.CARDTYPE,
      I.ACTIVE,
      I.STGRPCODE,
      I.KEYWORD5,
      I.B2CCODE,
      I.CODE,
      I.NAME,
      I.IMAGEINC,
      G.ONHAND AS STOK
    FROM
      LG_123_ITEMS as I
      LEFT JOIN LV_123_01_GNTOTST G ON G.STOCKREF = I.LOGICALREF AND G.INVENNO = -1
      LEFT JOIN LG_123_PRCLIST P ON P.CARDREF = I.LOGICALREF AND P.PTYPE = 2 AND P.CLSPECODE = 'T01' AND P.ACTIVE = 0
      LEFT JOIN DEVIR as DV on DV.STOCKREF = I.LOGICALREF
      LEFT JOIN LastDate as LD on LD.STOCKREF = I.LOGICALREF
      LEFT JOIN aa as cG ON cG.KOD = I.LOGICALREF
    WHERE
      I.ACTIVE = 0 AND
      I.CARDTYPE = 1;
    Bu değişiklikler, sorgunun daha düzenli ve anlaşılır olmasını sağlamalıdır. Ancak, bu sadece birkaç olası sorunun ele alınmasıdır, tam olarak isteğinize bağlı olarak daha fazla düzenleme yapmanız gerekebilir.
  • 10-10-2023, 11:18:26
    #3
    aa tablosunu tanımlarsan çözülür gibi
    with aa as (
    select distinct
    ...
    )
    şeklinde deneyebilir misin
  • 10-10-2023, 11:21:44
    #4
    furukderki adlı üyeden alıntı: mesajı görüntüle
    aa tablosunu tanımlarsan çözülür gibi
    with aa as (
    select distinct
    ...
    )
    şeklinde deneyebilir misin
    Hocam desteğiniz için teşekkür ederim ama hem gpt hemde sizinkisini denediğimde düzgün sonuç alamadım 2 adet with ekleyemiyorum.
  • 10-10-2023, 11:23:58
    #5
    Tarihler, birbiri ile eşleşiyor mu? mesela eşitliğin bir tarafı boş, diğer taraf değer alarak geliyor olabilir mi?
  • 10-10-2023, 11:29:13
    #6
    mkozdogan adlı üyeden alıntı: mesajı görüntüle
    Tarihler, birbiri ile eşleşiyor mu? mesela eşitliğin bir tarafı boş, diğer taraf değer alarak geliyor olabilir mi?
    Hocam kodu tek başına çalıştırdığımda düzgün çalışıyor ve tüm tabloyu olarak çekiyor. Fakat sorun:
    SELECT
        distinct(S.STOCKREF) as KOD,
        DATEDIFF(day,MAX(S.DATE_),GETDATE()) AS ISLEMGORMEYENGUN,
        MAX(S.DATE_) as SONSATIS,
        S.AMOUNT AS adet
    FROM LG_123_01_STLINE S
    WHERE S.TRCODE = 8 AND S.CANCELLED = 0 AND S.INVOICEREF <> 0
    GROUP BY S.STOCKREF,S.AMOUNT
    Yukardaki kod 16000 veri çekiyor
    Bu kodun çalışmasında değil sanırım bu LG_123_ITEMS a left join oluyor yani olmayanları değil aslında ilk items ın çekilip sonrasında yanına aa nın eklenmesi lazım. Yani eğer filtrelemeyi uygularsa 3800 küsür veri çekmesi gerekiyorken 16000 veri çekiyor.
  • 10-10-2023, 11:29:55
    #7
    Hocam sorgu çalışıyor, tekrar kontrol etmeni öneririm.

  • 10-10-2023, 11:31:51
    #8
    KAYABEY adlı üyeden alıntı: mesajı görüntüle
    Hocam sorgu çalışıyor, tekrar kontrol etmeni öneririm.

    Hocam desteğiniz için teşekkür ederim sorgu zaten çalışıyor fakat sorun çalışmaması değil 3800 küsür veri çekmesi gerekiyorken 16000 veri çekiyor
  • 10-10-2023, 12:06:07
    #9
    Aşağıdaki gibi dener misiniz?

    WITH LastDate AS (
         SELECT S.STOCKREF,
           ISNULL(MAX(S.DATE_),'2022-01-01 00:00:00.000') AS MAX_DATE,
           S.AMOUNT AS adet
    FROM LG_001_01_STLINE S
    WHERE S.TRCODE = 1 AND S.LINETYPE = 0 AND S.CANCELLED = 0
          AND S.DATE_ = (SELECT MAX(DATE_) FROM LG_001_01_STLINE WHERE STOCKREF = S.STOCKREF AND TRCODE = 1 AND LINETYPE = 0 AND CANCELLED = 0)
    GROUP BY S.STOCKREF, S.AMOUNT
    ), aa AS (
      SELECT
        distinct(S.STOCKREF) as KOD,
        DATEDIFF(day,MAX(S.DATE_),GETDATE()) AS ISLEMGORMEYENGUN,
        MAX(S.DATE_) as SONSATIS,
        S.AMOUNT AS adet
    FROM LG_001_01_STLINE S
    WHERE S.TRCODE = 8 AND S.CANCELLED = 0 AND S.INVOICEREF <> 0
    GROUP BY S.STOCKREF,S.AMOUNT
    ),
     DEVIR AS (
    SELECT S.STOCKREF as STOCKREF,SUM(S.AMOUNT) as Devir FROM LG_001_01_STLINE S left join LG_001_ITEMS I on I.LOGICALREF = S.STOCKREF WHERE I.ACTIVE = 0 AND I.CARDTYPE = 1 AND S.LINETYPE =0 AND S.TRCODE = 14 AND S.CANCELLED =0  GROUP BY S.STOCKREF
    )
    SELECT
      I.LOGICALREF,
      I.CARDTYPE,
      I.ACTIVE,
      I.STGRPCODE,
      I.KEYWORD5,
      I.B2CCODE,
      I.CODE,
      I.NAME,
      I.IMAGEINC,
      G.ONHAND AS STOK
    FROM LG_001_ITEMS as I
    LEFT JOIN LV_001_01_GNTOTST G ON G.STOCKREF = I.LOGICALREF
    LEFT JOIN LG_001_PRCLIST P ON P.CARDREF = I.LOGICALREF
    LEFT JOIN DEVIR as DV on DV.STOCKREF = I.LOGICALREF
    LEFT JOIN LastDate as LD on LD.STOCKREF = I.LOGICALREF
    LEFT JOIN aa as cG ON cG.KOD = I.LOGICALREF
    WHERE I.ACTIVE = 0 AND I.CARDTYPE = 1 AND P.CLSPECODE = 'T01' AND P.ACTIVE = 0 AND P.PTYPE = 2  AND G.INVENNO = -1