arkadaslar aslında bir sorunum yok ama yanlısmı yapıyorum diye fikrinize almak istedim
acıkcası uzun bir konu olacagı için daha önceden sormaktan vazgecmiştim ama SQL karmasıklasınca degerli fikirlerinizi almak istedim.
kayıtlı carilerimiz CARI tablosuna kaydedilir.
bu carilere ait servisler CARI_SERVIS tablosuna kaydedilir.
CARI_SERVIS tablosunda bulunan servislere kesilen fişler SERVIS tablosuna kaydedilir.
biz bu 3 tablodan raporlama yapıyoruz.
hangi carinin kac servisi var hangi servis kac arıza yamış cari ve servis bazında maliyetler.
simdi SQL koduna bakalım.
bu SQL de cariye ait servisler, servis sayısı ve servislerin belirtilen tarih aralıgındaki arıza sayısı bulunmaktadır sonucları dogru vermektedir.
Kod: Tümünü seç
SELECT C.*, CS.*,
(SELECT COUNT(*) FROM CARI_SERVIS CS WHERE CS.BLCRKODU = C.BLKODU ) AS CariServisSayisi,
(SELECT COUNT(*) FROM SERVIS S WHERE S.SILINDI=0 AND S.URUN_ADI = CS.URUN_ADI
AND S.OZELALANTANIM_27 = 'ARIZA'
AND S.GELIS_TARIHI >= '01.04.2010' AND S.GELIS_TARIHI <= '30.04.2010')AS ServisArizaSayisi
FROM CARI_SERVIS CS INNER JOIN CARI C ON (CS.BLCRKODU = C.BLKODU)
WHERE C.BLKODU=CS.BLCRKODU
AND UPPER(CARIKODU)LIKE UPPER('CR00095' COLLATE PXW_TURK)
AND COALESCE(C.AKTIF,1)=1
AND COALESCE(CS.AKTIF,1)=1
ORDER BY C.TICARI_UNVANI ASC, CS.URUN_ADI ASC
Kod: Tümünü seç
SELECT C.*, CS.*,
/* cari bazında bilgiler */
(SELECT COUNT(*) FROM CARI_SERVIS CS WHERE CS.BLCRKODU = C.BLKODU ) AS CariServisSayisi,
(SELECT COUNT(*) FROM SERVIS S WHERE S.BLCRKODU = C.BLKODU AND S.OZELALANTANIM_27='ARIZA') AS CariArizaSayisi,
(SELECT COUNT(*) FROM SERVIS S WHERE S.BLCRKODU = C.BLKODU AND S.OZELALANTANIM_27='PERİYODİK BAKIM') AS CariBakimSayisi,
(SELECT SUM(TOPLAM_PARCA_KPB) FROM SERVIS S WHERE S.BLCRKODU = C.BLKODU) AS CariToplamParca,
(SELECT SUM(TOPLAM_ISCILIK_KPB) FROM SERVIS S WHERE S.BLCRKODU = C.BLKODU) AS CariToplamiscilik,
(SELECT SUM(TOPLAM_KDV_KPB) FROM SERVIS S WHERE S.BLCRKODU = C.BLKODU) AS CariToplamKdv ,
(SELECT SUM(TOPLAM_GENEL_KPB) FROM SERVIS S WHERE S.BLCRKODU = C.BLKODU) AS CariGenelToplam ,
/* ---ServisArizaSayisi--- */
(SELECT COUNT(*) FROM SERVIS S WHERE S.SILINDI=0
AND S.URUN_ADI = CS.URUN_ADI AND S.OZELALANTANIM_27 = 'ARIZA'
AND S.GELIS_TARIHI >= '01.04.2010' AND S.GELIS_TARIHI <= '30.04.2010'
) AS ServisArizaSayisi ,
/* ---ServisBakimSayisi--- */
(SELECT COUNT(*) FROM SERVIS S WHERE S.SILINDI=0
AND S.URUN_ADI = CS.URUN_ADI AND S.OZELALANTANIM_27 = 'PERİYODİK BAKIM'
AND S.GELIS_TARIHI >= '01.04.2010' AND S.GELIS_TARIHI <= '30.04.2010'
) AS ServisBakimSayisi ,
/* ---ServisToplamParca--- */
(SELECT SUM(TOPLAM_PARCA_KPB) FROM SERVIS S WHERE S.SILINDI=0
AND S.URUN_ADI = CS.URUN_ADI
AND S.GELIS_TARIHI >= '01.04.2010' AND S.GELIS_TARIHI <= '30.04.2010'
) AS ServisToplamParca ,
/* ---ServisToplamiscilik--- */
(SELECT SUM(TOPLAM_ISCILIK_KPB) FROM SERVIS S WHERE S.SILINDI=0
AND S.URUN_ADI = CS.URUN_ADI
AND S.GELIS_TARIHI >= '01.04.2010' AND S.GELIS_TARIHI <= '30.04.2010'
) AS ServisToplamiscilik ,
/* ---ServisToplamKdv--- */
(SELECT SUM(TOPLAM_KDV_KPB) FROM SERVIS S WHERE S.SILINDI=0
AND S.URUN_ADI = CS.URUN_ADI
AND S.GELIS_TARIHI >= '01.04.2010' AND S.GELIS_TARIHI <= '30.04.2010'
) AS ServisToplamKdv ,
/* ---ServisGenelToplam--- */
(SELECT SUM(TOPLAM_GENEL_KPB) FROM SERVIS S WHERE S.SILINDI=0
AND S.URUN_ADI = CS.URUN_ADI
AND S.GELIS_TARIHI >= '01.04.2010' AND S.GELIS_TARIHI <= '30.04.2010'
) AS ServisGenelToplam
FROM CARI_SERVIS CS INNER JOIN CARI C ON (CS.BLCRKODU = C.BLKODU)
WHERE C.BLKODU=CS.BLCRKODU
AND UPPER(CARIKODU)LIKE UPPER('CR00095' COLLATE PXW_TURK)
AND COALESCE(C.AKTIF,1)=1
AND COALESCE(CS.AKTIF,1)=1
ORDER BY C.TICARI_UNVANI ASC, ServisArizaSayisi DESC, CS.URUN_ADI ASC
evet benim Sormak istedigim
bu kullandıgım SQL den daha az kod yazabilirmiyim ve daha hızlı rapor alabilecegim yöntem varmı
dogru sonuc alsamda daha dogrusu veya daha iyisi varsa ögrenip yola devam edeyim
Şimdiden tesekkürler