none
SQL WITH İÇERİSİNDE TARİH ARALIĞI RRS feed

  • Soru

  • ARKADAŞLAR MERHABA. VERİ TABANIMDA KAYITLI OLAN URUN HAREKET DETAYLARINDA URUNE AIT ALIŞ FİYATLARI SATIŞ FİYATLARI VAR BEN SQL DE BUNLARIN  MAX , MIN , AVG GİBİ DEĞERLERİNİ ALIYORUM. VE LİSTELEME YAPTIĞIM ZAMAN HER ÜRÜNÜM İÇİN BİR SATIR AÇILIYOR NORMAL OLARAK. 

    YANİ

    EKMEK --- ORTALAMA = 1,25

    KOLA -- ORTALAMA = 3,55 

    BENZERİ

    KODUM ŞU ŞEKİLDE

    ALTER VIEW KARZARAR AS
    WITH TUTARLAR(BARKOD,AD,BIRIMALIS,BIRIMSATIS,GIRENMIKTAR,CIKANMIKTAR,ORTALAMAMALIYET,ORTALAMAGETIRI)
    AS 
    (
    SELECT BARKOD,URUNAD,
    SUM(CASE WHEN KISAKOD ='AF' THEN BIRIM_FİYAT ELSE 0 END) AS ALIS,
    SUM(CASE WHEN KISAKOD ='S' THEN BIRIM_FİYAT ELSE 0 END) AS SATIS,
    SUM(CASE WHEN GCKOD ='G' THEN MIKTAR ELSE 0 END) AS GIREN,
    SUM(CASE WHEN GCKOD ='C' THEN MIKTAR ELSE 0 END) AS CIKAN,
    AVG(CASE WHEN KISAKOD ='AF' THEN BIRIM_FİYAT ELSE 0 END) AS MALIYET,
    AVG(CASE WHEN KISAKOD ='S' THEN BIRIM_FİYAT ELSE 0 END) AS GETIRI
    
    FROM BELGE_DETAY GROUP BY BARKOD,URUNAD 
    )
    SELECT 
    B.BARKOD,
    T.AD,
    /*Kâr Oranı (%) = ((Satış Fiyatı - Alış Fiyatı) / Alış Fiyatı) x 100*/
    ISNULL(((T.BIRIMSATIS-t.BIRIMALIS)/NULLIF(t.BIRIMALIS, 0))*100,0) AS KARORAN,
    /*Kâr Marjı (%) = ((Satış Fiyatı - Alış Fiyatı) / Satış Fiyatı) x 100*/
    ISNULL(((T.BIRIMSATIS-t.BIRIMALIS)/NULLIF(t.BIRIMSATIS, 0))*100,0) AS KARMARJ,
    CASE WHEN (T.BIRIMSATIS-T.BIRIMALIS)>0 THEN 'Kâr' WHEN (T.BIRIMSATIS-T.BIRIMALIS)<0 THEN 'Zarar' ELSE 'Sabit' END AS KZS,
    T.BIRIMALIS AS BIRIMALIS,
    T.BIRIMSATIS AS BIRIMSATIS,
    T.ORTALAMAMALIYET AS ORTMALIYET,
    T.ORTALAMAGETIRI AS ORTGETIRI,
    T.GIRENMIKTAR AS GIRENMIKTAR,
    T.CIKANMIKTAR AS CIKANMIKTAR,
    T.GIRENMIKTAR-T.CIKANMIKTAR AS ENVANTER
    FROM STOK_BARKOD AS B
    INNER JOIN TUTARLAR AS T ON T.BARKOD=B.BARKOD
    GROUP BY B.BARKOD,T.AD,T.BIRIMALIS,T.BIRIMSATIS,T.GIRENMIKTAR,T.CIKANMIKTAR,ORTALAMAMALIYET,ORTALAMAGETIRI

    ŞIMDİ BEN BELGE DETAY TABLOSUNDA YER ALAN DUZENLEME_TARİHİ KOLONUNA DA SORGUMA DAHİL ETMEK İSTİYORUM.

    DAHIL EDİNCE TARİHLER DAKİKA BAZINDA BİLE BİRİBİRİNDEN FARKLI OLDUĞU İÇİN GRUPLAMAM BOZULUYOR .

    GURUPLAMA BOZULMADAN TARIH ALANINI EKLEYİP C# TARAFINDA WHERE ILE İKİ TARİH ARASINDAKİ DEĞERLERİ ALMAK İSTİYORUM BUNU NASIL YAPABİLİRİM.

    15 Ocak 2017 Pazar 11:06

Yanıtlar

  • Sana defalarca view yerine bu tip isler icin function onerdim ama dinlemedin :( Umarim bu sefer dinlersin:

    CREATE FUNCTION ufn_KarZarar
        (
          @baslangic DATETIME ,
          @bitis DATETIME
        )
    RETURNS TABLE
    AS
    RETURN
        (
    	WITH    belgeDetay
                  AS ( SELECT   BARKOD ,
                                URUNAD ,
                                KISAKOD ,
                                BIRIM_FİYAT GCKOD ,
                                MIKTAR
                       FROM     BELGE_DETAY
                       WHERE    DUZENLEME_TARİHİ >= @baslangic
                                AND DUZENLEME_TARİHİ < @bitis
                     ),
                TUTARLAR ( BARKOD, AD, BIRIMALIS, BIRIMSATIS, GIRENMIKTAR, CIKANMIKTAR, ORTALAMAMALIYET, ORTALAMAGETIRI )
                  AS ( SELECT   BARKOD ,
                                URUNAD ,
                                SUM(CASE WHEN KISAKOD = 'AF' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS ALIS ,
                                SUM(CASE WHEN KISAKOD = 'S' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS SATIS ,
                                SUM(CASE WHEN GCKOD = 'G' THEN MIKTAR
                                         ELSE 0
                                    END) AS GIREN ,
                                SUM(CASE WHEN GCKOD = 'C' THEN MIKTAR
                                         ELSE 0
                                    END) AS CIKAN ,
                                AVG(CASE WHEN KISAKOD = 'AF' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS MALIYET ,
                                AVG(CASE WHEN KISAKOD = 'S' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS GETIRI
                       FROM     belgeDetay
                       GROUP BY BARKOD ,
                                URUNAD
                     )
        SELECT  B.BARKOD ,
                T.AD ,
    /*Kâr Oranı (%) = ((Satış Fiyatı - Alış Fiyatı) / Alış Fiyatı) x 100*/
                ISNULL(( ( T.BIRIMSATIS - T.BIRIMALIS ) / NULLIF(T.BIRIMALIS, 0) )
                       * 100, 0) AS KARORAN ,
    /*Kâr Marjı (%) = ((Satış Fiyatı - Alış Fiyatı) / Satış Fiyatı) x 100*/
                ISNULL(( ( T.BIRIMSATIS - T.BIRIMALIS ) / NULLIF(T.BIRIMSATIS, 0) )
                       * 100, 0) AS KARMARJ ,
                CASE WHEN ( T.BIRIMSATIS - T.BIRIMALIS ) > 0 THEN 'Kâr'
                     WHEN ( T.BIRIMSATIS - T.BIRIMALIS ) < 0 THEN 'Zarar'
                     ELSE 'Sabit'
                END AS KZS ,
                T.BIRIMALIS AS BIRIMALIS ,
                T.BIRIMSATIS AS BIRIMSATIS ,
                T.ORTALAMAMALIYET AS ORTMALIYET ,
                T.ORTALAMAGETIRI AS ORTGETIRI ,
                T.GIRENMIKTAR AS GIRENMIKTAR ,
                T.CIKANMIKTAR AS CIKANMIKTAR ,
                T.GIRENMIKTAR - T.CIKANMIKTAR AS ENVANTER
        FROM    STOK_BARKOD AS B
                INNER JOIN TUTARLAR AS T ON T.BARKOD = B.BARKOD
        GROUP BY B.BARKOD ,
                T.AD ,
                T.BIRIMALIS ,
                T.BIRIMSATIS ,
                T.GIRENMIKTAR ,
                T.CIKANMIKTAR ,
                ORTALAMAMALIYET ,
                ORTALAMAGETIRI
    );
    

    • Yanıt Olarak İşaretleyen sevdaca 16 Ocak 2017 Pazartesi 08:25
    15 Ocak 2017 Pazar 19:19

Tüm Yanıtlar

  • Sana defalarca view yerine bu tip isler icin function onerdim ama dinlemedin :( Umarim bu sefer dinlersin:

    CREATE FUNCTION ufn_KarZarar
        (
          @baslangic DATETIME ,
          @bitis DATETIME
        )
    RETURNS TABLE
    AS
    RETURN
        (
    	WITH    belgeDetay
                  AS ( SELECT   BARKOD ,
                                URUNAD ,
                                KISAKOD ,
                                BIRIM_FİYAT GCKOD ,
                                MIKTAR
                       FROM     BELGE_DETAY
                       WHERE    DUZENLEME_TARİHİ >= @baslangic
                                AND DUZENLEME_TARİHİ < @bitis
                     ),
                TUTARLAR ( BARKOD, AD, BIRIMALIS, BIRIMSATIS, GIRENMIKTAR, CIKANMIKTAR, ORTALAMAMALIYET, ORTALAMAGETIRI )
                  AS ( SELECT   BARKOD ,
                                URUNAD ,
                                SUM(CASE WHEN KISAKOD = 'AF' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS ALIS ,
                                SUM(CASE WHEN KISAKOD = 'S' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS SATIS ,
                                SUM(CASE WHEN GCKOD = 'G' THEN MIKTAR
                                         ELSE 0
                                    END) AS GIREN ,
                                SUM(CASE WHEN GCKOD = 'C' THEN MIKTAR
                                         ELSE 0
                                    END) AS CIKAN ,
                                AVG(CASE WHEN KISAKOD = 'AF' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS MALIYET ,
                                AVG(CASE WHEN KISAKOD = 'S' THEN BIRIM_FİYAT
                                         ELSE 0
                                    END) AS GETIRI
                       FROM     belgeDetay
                       GROUP BY BARKOD ,
                                URUNAD
                     )
        SELECT  B.BARKOD ,
                T.AD ,
    /*Kâr Oranı (%) = ((Satış Fiyatı - Alış Fiyatı) / Alış Fiyatı) x 100*/
                ISNULL(( ( T.BIRIMSATIS - T.BIRIMALIS ) / NULLIF(T.BIRIMALIS, 0) )
                       * 100, 0) AS KARORAN ,
    /*Kâr Marjı (%) = ((Satış Fiyatı - Alış Fiyatı) / Satış Fiyatı) x 100*/
                ISNULL(( ( T.BIRIMSATIS - T.BIRIMALIS ) / NULLIF(T.BIRIMSATIS, 0) )
                       * 100, 0) AS KARMARJ ,
                CASE WHEN ( T.BIRIMSATIS - T.BIRIMALIS ) > 0 THEN 'Kâr'
                     WHEN ( T.BIRIMSATIS - T.BIRIMALIS ) < 0 THEN 'Zarar'
                     ELSE 'Sabit'
                END AS KZS ,
                T.BIRIMALIS AS BIRIMALIS ,
                T.BIRIMSATIS AS BIRIMSATIS ,
                T.ORTALAMAMALIYET AS ORTMALIYET ,
                T.ORTALAMAGETIRI AS ORTGETIRI ,
                T.GIRENMIKTAR AS GIRENMIKTAR ,
                T.CIKANMIKTAR AS CIKANMIKTAR ,
                T.GIRENMIKTAR - T.CIKANMIKTAR AS ENVANTER
        FROM    STOK_BARKOD AS B
                INNER JOIN TUTARLAR AS T ON T.BARKOD = B.BARKOD
        GROUP BY B.BARKOD ,
                T.AD ,
                T.BIRIMALIS ,
                T.BIRIMSATIS ,
                T.GIRENMIKTAR ,
                T.CIKANMIKTAR ,
                ORTALAMAMALIYET ,
                ORTALAMAGETIRI
    );
    

    • Yanıt Olarak İşaretleyen sevdaca 16 Ocak 2017 Pazartesi 08:25
    15 Ocak 2017 Pazar 19:19
  • Haklısınız hocam daha dikkatli olacağım. Çok teşekkür ederim
    16 Ocak 2017 Pazartesi 08:25