none
6 farklı kodu tek kod haline getirme RRS feed

  • Soru

  • Arkadaşlar merhaba,

    Aşağıda paylaşacağım kod satırları ile tablolar çekiyorum lakin bunu tek sorgu ile yapmam ve tek tabloda göstermem gerekiyor.Lütfen yardımcı olur musunuz nasıl yapabilirim?

    SELECT        marka, model, plaka               -- Marka / Model / Plaka / BakimToplami / ToplamUcret / KiralanmaAdedi (Kolonlar bu şekilde olacak)
    FROM            dbo.tblAraclar

    ---------------------------------------------------------
    SELECT        aracID, SUM(tutar) AS [Bakım Toplamı]
    FROM            dbo.tblBakimlar
    GROUP BY aracID

    ---------------------------------------------------------

    SELECT        aracID, SUM(toplamUcret) AS Expr1
    FROM            dbo.tblGecmisAracKiralamalari
    GROUP BY aracID
                                                        --bu iki toplam ücret toplanacak

    SELECT        aracID, SUM(toplamUcret) AS Expr1
    FROM            dbo.tblKiradakiAraclar
    GROUP BY aracID

    ------------------------------------------------------------

    SELECT        aracID, COUNT(ID) AS Expr1
    FROM            dbo.tblKiradakiAraclar
    GROUP BY aracID
                                                        --bu iki countlar toplanacak               

    SELECT        aracID, COUNT(ID) AS Expr1
    FROM            dbo.tblGecmisAracKiralamalari
    GROUP BY aracID


    • Düzenleyen Okan Asil 28 Mayıs 2016 Cumartesi 12:38
    28 Mayıs 2016 Cumartesi 12:37

Yanıtlar

  • WITH    Bakimlar ( aracID, [Bakım Toplamı] )
              AS ( SELECT   aracID ,
                            SUM(tutar)
                   FROM     dbo.tblBakimlar
                   GROUP BY aracID
                 ),
            GecmisKiralar ( aracId, Ucret, Sayi )
              AS ( SELECT   aracID ,
                            SUM(toplamUcret) ,
                            COUNT(*)
                   FROM     dbo.tblGecmisAracKiralamalari
                   GROUP BY aracID
                 ),
            Kiradakiler ( aracId, Ucret, Sayi )
              AS ( SELECT   aracID ,
                            SUM(toplamUcret) ,
                            COUNT(*)
                   FROM     dbo.tblKiradakiAraclar
                   GROUP BY aracID
                 )
        SELECT  a.marka ,
                a.model ,
                a.plaka ,
                b.[Bakım Toplamı] ,
                COALESCE(g.Ucret, 0) + COALESCE(k.Ucret, 0) AS [ToplamUcret] ,
                COALESCE(g.Sayi, 0) + COALESCE(k.Sayi, 0) AS [KiralanmaAdedi]
        FROM    dbo.tblAraclar a
                LEFT JOIN Bakimlar b ON a.aracId = b.aracId
                LEFT JOIN GecmisKiralar g ON a.aracId = g.aracId
                LEFT JOIN Kiradakiler k ON a.aracId = k.aracId;
    
    

    • Yanıt Olarak İşaretleyen Okan Asil 31 Mayıs 2016 Salı 21:14
    31 Mayıs 2016 Salı 10:43

Tüm Yanıtlar

  • joinlerle birleştirebilirsin anca. onun dışında niye 6 tablo yaptın ? araç kiradaysa bir değer tutturacaksın bool olarak değeri 1 olacak kirada değilse değeri 0 olacak ve bu sayede 1 tablo toplamda 3 tablo azalmış olacak bunu düşün derim. bu halde 5 tane join kullanman gerekir.
    28 Mayıs 2016 Cumartesi 12:41
  • joinlerle birleştirebilirsin anca. onun dışında niye 6 tablo yaptın ? araç kiradaysa bir değer tutturacaksın bool olarak değeri 1 olacak kirada değilse değeri 0 olacak ve bu sayede 1 tablo toplamda 3 tablo azalmış olacak bunu düşün derim. bu halde 5 tane join kullanman gerekir.
    Maalesef birleştiremedim yardımcı olur musunuz?
    28 Mayıs 2016 Cumartesi 12:48
  • join kullanmak istiyorsun herhalde tabloları birleştirmek istemiyorsun öyle değil mi?

    28 Mayıs 2016 Cumartesi 12:52
  • join kullanmak istiyorsun herhalde tabloları birleştirmek istemiyorsun öyle değil mi?

    her bir sql kodu en üstte bulunan alanların değerlerini veriyor.Ben tek tek sql sorgusu ile yazdığım kodu join ile çekmek istiyorum.Bu arada toplam ücret ve toplam kiralanma sorguları kendi içinde toplanacak.
    • Düzenleyen Okan Asil 28 Mayıs 2016 Cumartesi 12:55
    28 Mayıs 2016 Cumartesi 12:55
  • tamam kardeşim bende diyorum ki bool değer ekle bir mesela tblGecmisAracKiralamalari ve tblKiradakiAraclar tabloları aynı alanlara sahip  yine insert işlemi yaptır ama kiradakiler için bool değere 1 ata değilse 0 ata sorgunda where deger=1 veya 0 olarak sorgulat yine istediğin sonucu verir maksat aynı işlevde iki tabloluk yük olmaz bu hem veritabanında fzlalık hem programda
    28 Mayıs 2016 Cumartesi 12:58
  • tamam kardeşim bende diyorum ki bool değer ekle bir mesela tblGecmisAracKiralamalari ve tblKiradakiAraclar tabloları aynı alanlara sahip  yine insert işlemi yaptır ama kiradakiler için bool değere 1 ata değilse 0 ata sorgunda where deger=1 veya 0 olarak sorgulat yine istediğin sonucu verir maksat aynı işlevde iki tabloluk yük olmaz bu hem veritabanında fzlalık hem programda
    Haklısın evet ama ben senaryomu bu şekilde yaptım buna göre bir çözüm bulmak istiyorum.Yoksa dediğiniz gibi yapsam daha kullanışlı olurdu.
    28 Mayıs 2016 Cumartesi 13:01
  • daha açık şekilde tblArac olsun sahip olduğu sütunlar aracID ve tutar diyelim buna üçüncü ekle kiralikMi diye bool bir değer. insert yaparken tblArac tablosuna XX aracID sine sahip YY tutarında ve kiralikMi değeri 1 olan bir satır ekle. bunun gibi yaptın 100 kayıt var kiralık ve kiralık olmayan. kiralıkları çekecekken senin sorguna sadece where kiralikMi=1 ekleyeceksin ve yarı yarıya kurtulacaksın 
    28 Mayıs 2016 Cumartesi 13:01
  • daha açık şekilde tblArac olsun sahip olduğu sütunlar aracID ve tutar diyelim buna üçüncü ekle kiralikMi diye bool bir değer. insert yaparken tblArac tablosuna XX aracID sine sahip YY tutarında ve kiralikMi değeri 1 olan bir satır ekle. bunun gibi yaptın 100 kayıt var kiralık ve kiralık olmayan. kiralıkları çekecekken senin sorguna sadece where kiralikMi=1 ekleyeceksin ve yarı yarıya kurtulacaksın 
    Araçlar geçmişte kaçar defa kiralandı ve ne kadar gelir sağlandı gibi bazı bilgiler sebebiyle senaryomu dediğim gibi yukarıdaki şekliyle yaptım.Şu haliyle birleştirme amlamında bana yardımcı olacak kod yardımı yapabilirseniz çok memnun olurum.Cevaplar için ayrıca teşekkürler.
    28 Mayıs 2016 Cumartesi 13:11
  • ortak alanlar nedir aracID mi? ilk tabloda aracID yok ortak alanları söylersen join işlemi yapabiliriz

    28 Mayıs 2016 Cumartesi 13:32
  • ortak alanlar nedir aracID mi? ilk tabloda aracID yok ortak alanları söylersen join işlemi yapabiliriz

    Hepsinde aracID ortak..Listede onu göstermeyeceğimiz için yazmadım.

    İstadiğim kolon listesi şu şekilde :

     Marka / Model / Plaka / BakimToplami / ToplamUcret / KiralanmaAdedi 

    28 Mayıs 2016 Cumartesi 13:35
  • YArdımcı olacak kimse yok mu_?
    30 Mayıs 2016 Pazartesi 23:15
  • Subquery kullanabilirsin;

    SELECT marka, 
           model, 
           plaka, 
          (select SUM(tutar) from dbo.tblBakimlar b where a.aracID = b.aracID) as [Bakım Toplamı],
          (buraya diğer sorgularını da uydur),
          ...
    FROM  dbo.tblAraclar a
    
    


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    • Yanıt Olarak Öneren CetinBasoz 31 Mayıs 2016 Salı 10:46
    31 Mayıs 2016 Salı 06:29
  • WITH    Bakimlar ( aracID, [Bakım Toplamı] )
              AS ( SELECT   aracID ,
                            SUM(tutar)
                   FROM     dbo.tblBakimlar
                   GROUP BY aracID
                 ),
            GecmisKiralar ( aracId, Ucret, Sayi )
              AS ( SELECT   aracID ,
                            SUM(toplamUcret) ,
                            COUNT(*)
                   FROM     dbo.tblGecmisAracKiralamalari
                   GROUP BY aracID
                 ),
            Kiradakiler ( aracId, Ucret, Sayi )
              AS ( SELECT   aracID ,
                            SUM(toplamUcret) ,
                            COUNT(*)
                   FROM     dbo.tblKiradakiAraclar
                   GROUP BY aracID
                 )
        SELECT  a.marka ,
                a.model ,
                a.plaka ,
                b.[Bakım Toplamı] ,
                COALESCE(g.Ucret, 0) + COALESCE(k.Ucret, 0) AS [ToplamUcret] ,
                COALESCE(g.Sayi, 0) + COALESCE(k.Sayi, 0) AS [KiralanmaAdedi]
        FROM    dbo.tblAraclar a
                LEFT JOIN Bakimlar b ON a.aracId = b.aracId
                LEFT JOIN GecmisKiralar g ON a.aracId = g.aracId
                LEFT JOIN Kiradakiler k ON a.aracId = k.aracId;
    
    

    • Yanıt Olarak İşaretleyen Okan Asil 31 Mayıs 2016 Salı 21:14
    31 Mayıs 2016 Salı 10:43
  • WITH    Bakimlar ( aracID, [Bakım Toplamı] )
              AS ( SELECT   aracID ,
                            SUM(tutar)
                   FROM     dbo.tblBakimlar
                   GROUP BY aracID
                 ),
            GecmisKiralar ( aracId, Ucret, Sayi )
              AS ( SELECT   aracID ,
                            SUM(toplamUcret) ,
                            COUNT(*)
                   FROM     dbo.tblGecmisAracKiralamalari
                   GROUP BY aracID
                 ),
            Kiradakiler ( aracId, Ucret, Sayi )
              AS ( SELECT   aracID ,
                            SUM(toplamUcret) ,
                            COUNT(*)
                   FROM     dbo.tblKiradakiAraclar
                   GROUP BY aracID
                 )
        SELECT  a.marka ,
                a.model ,
                a.plaka ,
                b.[Bakım Toplamı] ,
                COALESCE(g.Ucret, 0) + COALESCE(k.Ucret, 0) AS [ToplamUcret] ,
                COALESCE(g.Sayi, 0) + COALESCE(k.Sayi, 0) AS [KiralanmaAdedi]
        FROM    dbo.tblAraclar a
                LEFT JOIN Bakimlar b ON a.aracId = b.aracId
                LEFT JOIN GecmisKiralar g ON a.aracId = g.aracId
                LEFT JOIN Kiradakiler k ON a.aracId = k.aracId;
    
    

    Teşekkürler Üstadım.
    31 Mayıs 2016 Salı 21:14