none
SQL Farklı Kayıtları Tek Cümlede Birşeltirme. RRS feed

  • Soru

  • Yapmak istediğim Durum'u şöyle izah edeyim.

    2 Tane SQL cümler var bu cülelerden birinde Faturalar Tablosundan Tüm Alış Faturalarını Alıyorum.

    Diğer Gümlede de Stokhareket Tablosundan Yapılan üretimlerin toplamlarını almam gerekiyor.

    Toplam girişlerin dökümü ve toplam çıkışlarını dökümünü Tek Grid üzerinde Gösteriken Bunu Rapor üzerinde de Göstermem gerekiyor.

    Devexpress Xtrareport Kullanıyorum.

    Çıkışlar İçin Kullandığım Sorgu

    SELECT        TARIH AS [A.TARIH], SUM(MIKTAR * BRUTFIYAT) AS [A.TOPLAM],
    (SELECT  SUM(MIKTAR * BRUTFIYAT) AS Expr1
    FROM            dbo.TBLSTOKHAR
    WHERE        (TARIH = TBLSTOKHAR_1.TARIH) AND (GCKOD = 'C')) AS [A.GTOPLAM], ACIKLAMA AS [A.ACIKLAMA]
    FROM            dbo.TBLSTOKHAR AS TBLSTOKHAR_1
    WHERE        (GCKOD = 'C')
    GROUP BY TARIH, ACIKLAMA

    Girişler İçin Kullandığım Sorgu

    SELECT TARIH AS [B.TARIH], SUM(GENELTOPLAM) AS [B.TOPLAM],(SELECT

    SUM(GENELTOPLAM) AS Expr1 FROM dbo.TBLFATURALAR WHERE

    (TARIH = TBLFATURALAR_1.TARIH)) AS [B.GTOPLAM],

    (CASE WHEN CHARINDEX('Alış Faturası', CAST(ACIKLAMA AS NVARCHAR(MAX))) > - 1 THEN 'Alış Faturası' END) AS [B.ACIKLAMA] FROM dbo.TBLFATURALAR AS TBLFATURALAR_1 WHERE (TURU = 'A') GROUP BY TARIH, CAST(ACIKLAMA AS NVARCHAR(MAX))

    Sıkıntım Şu

    Girişler sorgusundan Bana 184 Kayıt Dönerken

    Çıkışlar Tablosundan 320 Kayıt Dönüyor.

    Bu Kayıtları Tek Sorguda Almam gerekiyor.

    http://i.hizliresim.com/0mlV78.jpg

    Resmideki Gibi Durumu C# da Halledebildim bir Türlü Ama 

    Repot'a Bunu Bu Şekilde SQL üzerinden Almam Gerekiyor. Yardımcı Olursanız Çok Sevinirim. İyi çalışmalar.


    10 Ocak 2016 Pazar 13:14

Tüm Yanıtlar

  • Left join sorgusu ile birleştirmen gerekiyor. Sorgun baya karışık.


    kdrgny@outlook.com

    10 Ocak 2016 Pazar 13:26
  • Merhaba Emre Bey,

    İki farklı sorgunuz var ve bunlardan birisi Girişler, diğeri Çıkışlar temsil ediyor. Anladığım kadarıyla her iki sorguyu tek bir sonuç olarak getirmeye çalışıyorsunuz. Eğer isteğiniz buysa,

    SELECT        TARIH AS [A.TARIH], SUM(MIKTAR * BRUTFIYAT) AS [A.TOPLAM],
    (SELECT  SUM(MIKTAR * BRUTFIYAT) AS Expr1, 'Girişler' as Durum
    FROM            dbo.TBLSTOKHAR
    WHERE        (TARIH = TBLSTOKHAR_1.TARIH) AND (GCKOD = 'C')) AS [A.GTOPLAM], ACIKLAMA AS [A.ACIKLAMA]
    FROM            dbo.TBLSTOKHAR AS TBLSTOKHAR_1
    WHERE        (GCKOD = 'C')
    GROUP BY TARIH, ACIKLAMA
    
    UNION ALL
    
    SELECT        TARIH AS [B.TARIH], SUM(GENELTOPLAM) AS [B.TOPLAM],(SELECT        
    SUM(GENELTOPLAM) AS Expr1 , 'Çıkışlar'
    FROM dbo.TBLFATURALAR WHERE        
    (TARIH = TBLFATURALAR_1.TARIH)) AS [B.GTOPLAM], 
    (CASE WHEN CHARINDEX('Alış Faturası', CAST(ACIKLAMA AS NVARCHAR(MAX))) > - 1 THEN 'Alış Faturası' END) AS [B.ACIKLAMA]
    FROM            dbo.TBLFATURALAR AS TBLFATURALAR_1
    WHERE        (TURU = 'A')
    GROUP BY TARIH, CAST(ACIKLAMA AS NVARCHAR(MAX))

    şeklinde bir komutla tek result set haline getirebilirsiniz.  Her iki sonucu ayrı ayrı görebilmek için de 'Girişler' ve 'Çıkışlar' olacak şekilde her bir satıra açıklayıcı bir Durum kolonu ekledim.

    Umarım faydalı olur...

    13 Ocak 2016 Çarşamba 13:08