none
group by RRS feed

  • Soru

  • CREATE TABLE [DVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [KasaId] [INT] NULL,
        [GHareket] [NVARCHAR](10) NULL,
        [CHareket] [NVARCHAR](10) NULL,
        [SDoviz] [NVARCHAR](10) NULL,
        [ADoviz] [NVARCHAR](10) NULL,
        [Tarih] [DATE] NULL,
        [Borc] [DECIMAL](12, 2) NOT NULL,
        [Alacak] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [HesapId] [INT] NULL,
        CONSTRAINT [PK_DVeri]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [KVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [Doviz] [NVARCHAR](10) NULL,
        [Hareket] [NVARCHAR](10) NULL,
        [KasaId] [INT] NOT NULL,
        [HesapId] [INT] NOT NULL,
        [Tarih] [DATE] NULL,
        [Tutar] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [Borc] [DECIMAL](12, 2) NULL,
        [Alacak] [DECIMAL](12, 2) NULL,
        CONSTRAINT [PK_KVERİ]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 1, 5, '2019-01-15', 750.00, 'Test', 0.00, 750.00),
    ('TL', 'Kasa Giriş', 1, 3, '2019-01-20', 850.00, 'Test', 850.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 7, '2019-01-21', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 8, '2019-01-22', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Çıkış', 1, 9, '2019-01-23', 1500.00, 'Test', 0.00, 1500.00),
    ('TL', 'Kasa Giriş', 1, 13, '2019-01-24', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 11, '2019-01-25', 2000.00, 'Test', 2000.00, 0.00);
    
    INSERT INTO DVeri
    (
        KasaId,
        GHareket,
        CHareket,
        SDoviz,
        ADoviz,
        Tarih,
        Borc,
        Alacak,
        Aciklama,
        HesapId
    )
    VALUES
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-12', 530.00, 100.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-13', 1060.00, 200.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'TL', 'USD', '2019-01-14', 100.00, 540.00, 'ALIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-15', 550.00, 110.00, 'SATIŞ', 0);
    
    INSERT INTO Hesaplar
    (
        HesapAdi
    )
    VALUES
    ('bonus'),
    ('world'),
    ('axess'),
    ('nakit'),
    ('özel'),
    ('tüzel'),
    ('Hasan'),
    ('kaan'),
    ('öznel'),
    ('yunus'),
    ('mustafa'),
    ('tuncay'),
    ('ismail');


    decimal alacak =
                    (db.KVeri.Where(c => c.Doviz == "TL" && c.Hareket == "Kasa Çıkış").Sum(c => c.Tutar) ?? 0) +
                    (db.DVeri.Where(c => c.ADoviz == "TL").Sum(c => c.Alacak) ?? 0);
    
    decimal borc =
                    (db.KVeri.Where(c => c.Doviz == "TL" && c.Hareket == "Kasa Giriş").Sum(c => c.Tutar) ?? 0) +
                    (db.DVeri.Where(c =>  c.SDoviz == "TL" ).Sum(c => c.Borc) ?? 0);
    
                var sonuc = (from pd in db.Hesaplar)
                    join c in db.KVeri on pd.Id equals c.KasaId
                    join x in db.DVeri on pd.Id equals x.KasaId                
                    orderby pd.Id
                    group c by new {pd.HesapAdi}
                    into grp
                    select new
                    {
                        bs = grp.Key.HesapAdi,
                        bakiye = borc-alacak
                    }).ToList();
    
                return sonuc;

    Merhaba, yukardaki kod ile kasa adı ve bakiyesini almak istiyorum ama sonuç hatalı geliyor. ayrıca 2. bir kasa hesabı açıldığında bu 2.kasa gelmiyor, yardımlarınız bekliyorm/z syg

    28 Nisan 2019 Pazar 16:27

Yanıtlar

  • Alt alta buraya yazınca alan daralıyor, onun icin ilk sorunun altına yazıyorum.
    • Yanıt Olarak İşaretleyen canleveent 29 Nisan 2019 Pazartesi 14:29
    29 Nisan 2019 Pazartesi 13:03
    Moderatör
  • Oncelikle senin tablolar biraz düzeltelim, bu haliyle sanki iliskileri yokmuş gibi duruyor, bir de Linq classlari oluşturulurken iliskiler olmadigindan "navigasyon" propertyleri olmayacak (Linq'da Join islemi nadiren gerekiyor, buradaki Join cok gereksiz):

    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [DVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [KasaId] [INT] NULL REFERENCES Hesaplar (Id)
    	ON DELETE SET NULL ON UPDATE CASCADE,
        [GHareket] [NVARCHAR](10) NULL,
        [CHareket] [NVARCHAR](10) NULL,
        [SDoviz] [NVARCHAR](10) NULL,
        [ADoviz] [NVARCHAR](10) NULL,
        [Tarih] [DATE] NULL,
        [Borc] [DECIMAL](12, 2) NOT NULL,
        [Alacak] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [HesapId] [INT] NULL,
        CONSTRAINT [PK_DVeri]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [KVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [Doviz] [NVARCHAR](10) NULL,
        [Hareket] [NVARCHAR](10) NULL,
        [KasaId] [INT] NOT NULL REFERENCES Hesaplar (Id),
        [HesapId] [INT] NOT NULL,
        [Tarih] [DATE] NULL,
        [Tutar] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [Borc] [DECIMAL](12, 2) NULL,
        [Alacak] [DECIMAL](12, 2) NULL,
        CONSTRAINT [PK_KVERİ]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    
    INSERT INTO Hesaplar
    (
        HesapAdi
    )
    VALUES
    ('bonus'),
    ('world'),
    ('axess'),
    ('nakit'),
    ('özel'),
    ('tüzel'),
    ('Hasan'),
    ('kaan'),
    ('öznel'),
    ('yunus'),
    ('mustafa'),
    ('tuncay'),
    ('ismail');
    
    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 1, 5, '2019-01-15', 750.00, 'Test', 0.00, 750.00),
    ('TL', 'Kasa Giriş', 1, 3, '2019-01-20', 850.00, 'Test', 850.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 7, '2019-01-21', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 8, '2019-01-22', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Çıkış', 1, 9, '2019-01-23', 1500.00, 'Test', 0.00, 1500.00),
    ('TL', 'Kasa Giriş', 1, 13, '2019-01-24', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 11, '2019-01-25', 2000.00, 'Test', 2000.00, 0.00),
    ('USD', 'Kasa Çıkış', 2, 5, '2019-01-16', 150.00, 'Test', 0.00, 350.00),
    ('TL', 'Kasa Giriş', 2, 3, '2019-01-21', 850.00, 'Test', 350.00, 0.00);
    
    INSERT INTO DVeri
    (
        KasaId,
        GHareket,
        CHareket,
        SDoviz,
        ADoviz,
        Tarih,
        Borc,
        Alacak,
        Aciklama,
        HesapId
    )
    VALUES
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-12', 530.00, 100.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-13', 1060.00, 200.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'TL', 'USD', '2019-01-14', 100.00, 540.00, 'ALIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-15', 550.00, 110.00, 'SATIŞ', 0);
    

    Diagramla göstermektesin gerekirse:

    Hesaplar ( Id ) +--------< 0...*  KVeri ( HesapId )
                          |
                          +--------< 0...*  DVeri ( HesapId )

                          

    • Yanıt Olarak İşaretleyen canleveent 29 Nisan 2019 Pazartesi 14:29
    29 Nisan 2019 Pazartesi 13:07
    Moderatör
  • var kTutar =
    		db.KVeri.Where(c => c.Doviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new { 
    		KasaId = c.Key.Id, 
    		HesapAd = c.Key.HesapAdi,
    		Alacak = c.Where(gc => gc.Hareket == "Kasa Çıkış").Sum(g => (decimal?) g.Tutar)??0M,
            Borc = c.Where(gc => gc.Hareket == "Kasa Giriş").Sum(g => (decimal?) g.Tutar)??0M
    		});
    var dTutar =
    		db.DVeri
    		.Where(c => c.ADoviz == "TL" || c.SDoviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new 
    		{
    			KasaId = c.Key.Id,
    			HesapAd = c.Key.HesapAdi,
    			Alacak = c.Where(gc => gc.ADoviz =="TL").Sum(g => (decimal?)g.Alacak)??0M,
    			Borc = c.Where(gc => gc.SDoviz =="TL").Sum(g => (decimal?)g.Borc)??0M,
    		});
    
    var sonuc = kTutar.Union(dTutar)
    .GroupBy(t => new { t.KasaId, t.HesapAd })
    .Select(t => new
    {
    	HesapAd = t.Key.HesapAd,
    	Bakiye = t.Sum(tg => tg.Borc - tg.Alacak)
    });
    
    return sonuc.ToList(); // sonuc anonymous, muhtemelen dynamic'e cast etmek istersin
    
    // return sonuc.Cast<dynamic>().ToList();

    • Yanıt Olarak İşaretleyen canleveent 29 Nisan 2019 Pazartesi 14:29
    29 Nisan 2019 Pazartesi 13:13
    Moderatör
  • Iliskili olsa verir. Senin property adlarını ben bilemem.

    • Yanıt Olarak İşaretleyen canleveent 30 Nisan 2019 Salı 12:57
    30 Nisan 2019 Salı 12:53
    Moderatör
  • Linq To SQL kullanabilirsin (SQL Server kullandigina gore neden kullanmıyorsun bilmiyorum). Ya da AsEnumerable ile lokale alabilirsin o zaman EF derdin kalmaz.
    • Yanıt Olarak İşaretleyen canleveent 1 Mayıs 2019 Çarşamba 11:32
    1 Mayıs 2019 Çarşamba 09:40
    Moderatör
  • Sorularini anlamak muamma. Yukaridaki kodda var zaten nasıl yapacağın, sadece biraz mantigini gözden gecirseydin yeterdi. Senin verdigin haliyle olmaz tabii ki. Hem iliskili olsun istiyorsun, hem de iliskisiz veri ekliyorsun.

    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
    	[HesapKodu] VARCHAR(10) null, 
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [DVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [KasaId] [INT] NULL REFERENCES Hesaplar (Id),
        [GHareket] [NVARCHAR](10) NULL,
        [CHareket] [NVARCHAR](10) NULL,
        [SDoviz] [NVARCHAR](10) NULL,
        [ADoviz] [NVARCHAR](10) NULL,
        [Tarih] [DATE] NULL,
        [Borc] [DECIMAL](12, 2) NOT NULL,
        [Alacak] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [HesapId] [INT] NULL REFERENCES Hesaplar (Id)
    	ON DELETE SET NULL ON UPDATE CASCADE,
        CONSTRAINT [PK_DVeri]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [KVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [Doviz] [NVARCHAR](10) NULL,
        [Hareket] [NVARCHAR](10) NULL,
        [KasaId] [INT] NOT NULL REFERENCES Hesaplar (Id),
        [HesapId] [INT] NOT NULL,
        [Tarih] [DATE] NULL,
        [Tutar] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [Borc] [DECIMAL](12, 2) NULL,
        [Alacak] [DECIMAL](12, 2) NULL,
        CONSTRAINT [PK_KVERİ]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    
    INSERT INTO Hesaplar
    (
        HesapAdi
    )
    VALUES
    ('bonus'),
    ('world'),
    ('axess'),
    ('nakit'),
    ('özel'),
    ('tüzel'),
    ('Hasan'),
    ('kaan'),
    ('öznel'),
    ('yunus'),
    ('mustafa'),
    ('tuncay'),
    ('ismail');
    
    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 1, 5, '2019-01-15', 750.00, 'Test', 0.00, 750.00),
    ('TL', 'Kasa Giriş', 1, 3, '2019-01-20', 850.00, 'Test', 850.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 7, '2019-01-21', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 8, '2019-01-22', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Çıkış', 1, 9, '2019-01-23', 1500.00, 'Test', 0.00, 1500.00),
    ('TL', 'Kasa Giriş', 1, 13, '2019-01-24', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 11, '2019-01-25', 2000.00, 'Test', 2000.00, 0.00),
    ('USD', 'Kasa Çıkış', 2, 5, '2019-01-16', 150.00, 'Test', 0.00, 350.00),
    ('TL', 'Kasa Giriş', 2, 3, '2019-01-21', 850.00, 'Test', 350.00, 0.00);
    
    INSERT INTO DVeri
    (
        KasaId,
        GHareket,
        CHareket,
        SDoviz,
        ADoviz,
        Tarih,
        Borc,
        Alacak,
        Aciklama,
        HesapId
    )
    VALUES
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-12', 530.00, 100.00, 'SATIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-13', 1060.00, 200.00, 'SATIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'TL', 'USD', '2019-01-14', 100.00, 540.00, 'ALIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-15', 550.00, 110.00, 'SATIŞ', null);
    

    • Yanıt Olarak İşaretleyen canleveent 2 Mayıs 2019 Perşembe 19:19
    2 Mayıs 2019 Perşembe 12:51
    Moderatör
  • Mesajlari oku. Soyluyor zaten.

    Sana kodu verdim yukarıda, illa code first migrations ile yapacaksan mesajları takip et.

    • Yanıt Olarak İşaretleyen canleveent 2 Mayıs 2019 Perşembe 19:19
    2 Mayıs 2019 Perşembe 13:33
    Moderatör
  • Dediğim gibi, sorularını anlamak muamma :( Yine ne istediğin belli degil.

    Sum(Borc)-Sum(0) => ??????? Istedigin kadar siniri topla, sonuc sifirdir. Sum(0) ne alaka? 

    Bir kere o yukarıdaki verilere gore, o kodla, oyle bir sonuc çıkmaz. Hadi diyelim ki cikti, eksik ve yanlış olur.

    with [data] ( HesapId,Tutar) as
    (
    SELECT KasaId, Borc
    from DVeri 
    WHERE ADoviz='TL'  
    union all
    select HesapId, Borc
    from DVeri 
    WHERE SDoviz='TL'  
    UNION all
    select KasaID, 
    case 
    	WHEN Hareket='Kasa Giriş' then Tutar
    	when Hareket='Kasa Çıkış' then -Tutar 
    	else 0 end
    FROM KVeri
    WHERE Doviz='TL' 
    )
    SELECT h.HesapAdi, SUM(d.Tutar) AS Bakiye 
    FROM [data] d
    left JOIN Hesaplar h ON h.Id = d.HesapId
    GROUP BY h.HesapAdi;

    • Yanıt Olarak İşaretleyen canleveent 3 Mayıs 2019 Cuma 15:28
    3 Mayıs 2019 Cuma 14:13
    Moderatör
  • "herseye ragmen", "bunun sonucu, sıfır olamaz", "matematik olunca ben de varım" ? Hayirdir, cok manidar olmuş.

    Sum(0) sonucu her zaman sifirdir - istisnai tek durum kriterlere uyan veri olmamasıdır. Sonucu sıfır olamaz derken herhalde kriterlere uyan veri yok demek istedin, eğer öyleyse bosuna neden "select Sum(Borc) ... where .." cagiriyorsun ki? Nasıl olsa kritere uyan veri yok madem, sonuc her zaman sabit.

    Ornek:

    SELECT SUM(0)
    FROM dbo.[Order Details]
    WHERE ProductId = 1;
    
    -- 0
    
    SELECT SUM(0)
    FROM dbo.[Order Details]
    WHERE ProductId = -1;
    
    -- NULL

    • Yanıt Olarak İşaretleyen canleveent 3 Mayıs 2019 Cuma 18:39
    3 Mayıs 2019 Cuma 17:06
    Moderatör

Tüm Yanıtlar

  • 1) SQL kodundaki mantigi anlayamadım. Ne neyle iliskili belli degil. Hesaplar ve hesapId var, ancak sonraki Linq koduna bakınca sanki iliski KasaId uzerinden. Ortada foreign key kodu olmadıgı icin de gercegi bilemiyoruz.

    2) Linq koduna bakinca da pek mantık göremiyorum. Yapmak istediğini ne? Gercekte ne neyle iliskili? Alman gereken sonuc ne? Senin kodun uzerinden gelen sonuc bana yüzde yüz doğru gorundu. 

    Ne yazik ki muhasebeci olmadigimdan senin kafandakileri anlayamıyorum.

    28 Nisan 2019 Pazar 22:08
    Moderatör
  • KVeri tablosunda KasaId, değeri hep 1

    buna yeni veri eklendiğinde yanı 2 id değeri geldiğinde

    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 2, 5, '2019-01-16', 150.00, 'Test', 0.00, 350.00),
    ('TL', 'Kasa Giriş', 2, 3, '2019-01-21', 850.00, 'Test', 350.00, 0.00),

    bunları tek bir id değerinde getiriyor.

    1. id bakiyesi   x,

    2. id bakiyesi  y, gibi getirmiyor,

    bunu anlamadım,

    29 Nisan 2019 Pazartesi 09:08
  • Alt alta buraya yazınca alan daralıyor, onun icin ilk sorunun altına yazıyorum.
    • Yanıt Olarak İşaretleyen canleveent 29 Nisan 2019 Pazartesi 14:29
    29 Nisan 2019 Pazartesi 13:03
    Moderatör
  • Oncelikle senin tablolar biraz düzeltelim, bu haliyle sanki iliskileri yokmuş gibi duruyor, bir de Linq classlari oluşturulurken iliskiler olmadigindan "navigasyon" propertyleri olmayacak (Linq'da Join islemi nadiren gerekiyor, buradaki Join cok gereksiz):

    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [DVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [KasaId] [INT] NULL REFERENCES Hesaplar (Id)
    	ON DELETE SET NULL ON UPDATE CASCADE,
        [GHareket] [NVARCHAR](10) NULL,
        [CHareket] [NVARCHAR](10) NULL,
        [SDoviz] [NVARCHAR](10) NULL,
        [ADoviz] [NVARCHAR](10) NULL,
        [Tarih] [DATE] NULL,
        [Borc] [DECIMAL](12, 2) NOT NULL,
        [Alacak] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [HesapId] [INT] NULL,
        CONSTRAINT [PK_DVeri]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [KVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [Doviz] [NVARCHAR](10) NULL,
        [Hareket] [NVARCHAR](10) NULL,
        [KasaId] [INT] NOT NULL REFERENCES Hesaplar (Id),
        [HesapId] [INT] NOT NULL,
        [Tarih] [DATE] NULL,
        [Tutar] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [Borc] [DECIMAL](12, 2) NULL,
        [Alacak] [DECIMAL](12, 2) NULL,
        CONSTRAINT [PK_KVERİ]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    
    INSERT INTO Hesaplar
    (
        HesapAdi
    )
    VALUES
    ('bonus'),
    ('world'),
    ('axess'),
    ('nakit'),
    ('özel'),
    ('tüzel'),
    ('Hasan'),
    ('kaan'),
    ('öznel'),
    ('yunus'),
    ('mustafa'),
    ('tuncay'),
    ('ismail');
    
    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 1, 5, '2019-01-15', 750.00, 'Test', 0.00, 750.00),
    ('TL', 'Kasa Giriş', 1, 3, '2019-01-20', 850.00, 'Test', 850.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 7, '2019-01-21', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 8, '2019-01-22', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Çıkış', 1, 9, '2019-01-23', 1500.00, 'Test', 0.00, 1500.00),
    ('TL', 'Kasa Giriş', 1, 13, '2019-01-24', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 11, '2019-01-25', 2000.00, 'Test', 2000.00, 0.00),
    ('USD', 'Kasa Çıkış', 2, 5, '2019-01-16', 150.00, 'Test', 0.00, 350.00),
    ('TL', 'Kasa Giriş', 2, 3, '2019-01-21', 850.00, 'Test', 350.00, 0.00);
    
    INSERT INTO DVeri
    (
        KasaId,
        GHareket,
        CHareket,
        SDoviz,
        ADoviz,
        Tarih,
        Borc,
        Alacak,
        Aciklama,
        HesapId
    )
    VALUES
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-12', 530.00, 100.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-13', 1060.00, 200.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'TL', 'USD', '2019-01-14', 100.00, 540.00, 'ALIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-15', 550.00, 110.00, 'SATIŞ', 0);
    

    Diagramla göstermektesin gerekirse:

    Hesaplar ( Id ) +--------< 0...*  KVeri ( HesapId )
                          |
                          +--------< 0...*  DVeri ( HesapId )

                          

    • Yanıt Olarak İşaretleyen canleveent 29 Nisan 2019 Pazartesi 14:29
    29 Nisan 2019 Pazartesi 13:07
    Moderatör
  • var kTutar =
    		db.KVeri.Where(c => c.Doviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new { 
    		KasaId = c.Key.Id, 
    		HesapAd = c.Key.HesapAdi,
    		Alacak = c.Where(gc => gc.Hareket == "Kasa Çıkış").Sum(g => (decimal?) g.Tutar)??0M,
            Borc = c.Where(gc => gc.Hareket == "Kasa Giriş").Sum(g => (decimal?) g.Tutar)??0M
    		});
    var dTutar =
    		db.DVeri
    		.Where(c => c.ADoviz == "TL" || c.SDoviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new 
    		{
    			KasaId = c.Key.Id,
    			HesapAd = c.Key.HesapAdi,
    			Alacak = c.Where(gc => gc.ADoviz =="TL").Sum(g => (decimal?)g.Alacak)??0M,
    			Borc = c.Where(gc => gc.SDoviz =="TL").Sum(g => (decimal?)g.Borc)??0M,
    		});
    
    var sonuc = kTutar.Union(dTutar)
    .GroupBy(t => new { t.KasaId, t.HesapAd })
    .Select(t => new
    {
    	HesapAd = t.Key.HesapAd,
    	Bakiye = t.Sum(tg => tg.Borc - tg.Alacak)
    });
    
    return sonuc.ToList(); // sonuc anonymous, muhtemelen dynamic'e cast etmek istersin
    
    // return sonuc.Cast<dynamic>().ToList();

    • Yanıt Olarak İşaretleyen canleveent 29 Nisan 2019 Pazartesi 14:29
    29 Nisan 2019 Pazartesi 13:13
    Moderatör
  • var kTutar =
    		db.KVeri.Where(c => c.Doviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new { 
    		KasaId = c.Key.Id, 
    		HesapAd = c.Key.HesapAdi,
    		Alacak = c.Where(gc => gc.Hareket == "Kasa Çıkış").Sum(g => (decimal?) g.Tutar)??0M,
            Borc = c.Where(gc => gc.Hareket == "Kasa Giriş").Sum(g => (decimal?) g.Tutar)??0M
    		});
    var dTutar =
    		db.DVeri
    		.Where(c => c.ADoviz == "TL" || c.SDoviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new 
    		{
    			KasaId = c.Key.Id,
    			HesapAd = c.Key.HesapAdi,
    			Alacak = c.Where(gc => gc.ADoviz =="TL").Sum(g => (decimal?)g.Alacak)??0M,
    			Borc = c.Where(gc => gc.SDoviz =="TL").Sum(g => (decimal?)g.Borc)??0M,
    		});
    
    var sonuc = kTutar.Union(dTutar)
    .GroupBy(t => new { t.KasaId, t.HesapAd })
    .Select(t => new
    {
    	HesapAd = t.Key.HesapAd,
    	Bakiye = t.Sum(tg => tg.Borc - tg.Alacak)
    });
    
    return sonuc.ToList(); // sonuc anonymous, muhtemelen dynamic'e cast etmek istersin
    
    // return sonuc.Cast<dynamic>().ToList();

    hocam bu koda hesapkodu "x" olanları getir yapabilir miyiz,

    hesaplar tablosunu aşağıdaki gibi yapınca,

    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
    [HesapKodu] [NCHAR](10) NULL,
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];



    29 Nisan 2019 Pazartesi 15:51
  • Yapabilirsin.
    29 Nisan 2019 Pazartesi 16:20
    Moderatör
  • Malesef hocam

    Aslında yapabilmek istediğim ,

    SELECT KVeri.KasaId, 
           SUM(BORC) - SUM(ALACAK)
            AS BAKIYE 
    FROM KVeri, Hesaplar
    WHERE KVeri.KasaId = Hesaplar.Id
           AND NOT Hesaplar.HesapKodu != 'Banka' AND Doviz='TL'
    GROUP BY KVeri.KasaId


    bu SQL sorgusuna  sizin düzenlenen SQL verileri kullanılacak  Ancak sorgu sadece KVeri tablosundan veri alıyor, DVeri tablosundaki veriyide alacak /// Bunu linq ile 

     aşağıdakii sonucu vericek

    //////





    • Düzenleyen canleveent 29 Nisan 2019 Pazartesi 18:49
    29 Nisan 2019 Pazartesi 17:09
  • Ne yazik ki anlamiyorum. DVeri tablosundaki veriyi de alacak ne demek.

    29 Nisan 2019 Pazartesi 19:04
    Moderatör
  • Toplam a dahil Edip sonucu(tüm toplamı) verecek
    29 Nisan 2019 Pazartesi 20:36
  • Anlasilmiyor, ortada degerler ve beklenen sonuc yok.
    29 Nisan 2019 Pazartesi 21:06
    Moderatör
  • var kTutar =
    		db.KVeri.Where(c => c.Doviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new { 
    		KasaId = c.Key.Id, 
    		HesapAd = c.Key.HesapAdi,
    		Alacak = c.Where(gc => gc.Hareket == "Kasa Çıkış").Sum(g => (decimal?) g.Tutar)??0M,
            Borc = c.Where(gc => gc.Hareket == "Kasa Giriş").Sum(g => (decimal?) g.Tutar)??0M
    		});
    var dTutar =
    		db.DVeri
    		.Where(c => c.ADoviz == "TL" || c.SDoviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new 
    		{
    			KasaId = c.Key.Id,
    			HesapAd = c.Key.HesapAdi,
    			Alacak = c.Where(gc => gc.ADoviz =="TL").Sum(g => (decimal?)g.Alacak)??0M,
    			Borc = c.Where(gc => gc.SDoviz =="TL").Sum(g => (decimal?)g.Borc)??0M,
    		});
    
    var sonuc = kTutar.Union(dTutar)
    .GroupBy(t => new { t.KasaId, t.HesapAd })
    .Select(t => new
    {
    	HesapAd = t.Key.HesapAd,
    	Bakiye = t.Sum(tg => tg.Borc - tg.Alacak)
    });
    
    return sonuc.ToList(); // sonuc anonymous, muhtemelen dynamic'e cast etmek istersin
    
    // return sonuc.Cast<dynamic>().ToList();


    peki hocam, bu koda Hesaplar tablosu hesapkodu banka olanları getir nasıl yazılır,
    30 Nisan 2019 Salı 09:27
  • gc.Kasa.HesapKodu == "Banka"
    30 Nisan 2019 Salı 12:09
    Moderatör
  • gc.Kasa.HesapKodu == "Banka"

    bunu, ilişkili olduğu halde 'Kasa.HesapKodu' olarak vermiyor,
    30 Nisan 2019 Salı 12:40
  • Iliskili olsa verir. Senin property adlarını ben bilemem.

    • Yanıt Olarak İşaretleyen canleveent 30 Nisan 2019 Salı 12:57
    30 Nisan 2019 Salı 12:53
    Moderatör
  • c# tarafında yaptıpımda xbank 713,33 olarak veriyor, gride (her yazdığınızı uyguladım, farklı ne denedimse,)

    oysa,

    xbank 13,33

    ybank 700,00

    yazacaktı,



    • Düzenleyen canleveent 30 Nisan 2019 Salı 13:12
    30 Nisan 2019 Salı 13:04
  • Senin datan bende yok. Ustelik bu yeni bir soru gibi. Ayni bir soru olarak sorsaydın ama veriyi verip, ne yapmak istediğini anlatamadikca sonuc alacagini da zannetmem.

    30 Nisan 2019 Salı 13:05
    Moderatör
  • var kTutar =
    		db.KVeri.Where(c => c.Doviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new { 
    		KasaId = c.Key.Id, 
    		HesapAd = c.Key.HesapAdi,
    		Alacak = c.Where(gc => gc.Hareket == "Kasa Çıkış").Sum(g => (decimal?) g.Tutar)??0M,
            Borc = c.Where(gc => gc.Hareket == "Kasa Giriş").Sum(g => (decimal?) g.Tutar)??0M
    		});
    var dTutar =
    		db.DVeri
    		.Where(c => c.ADoviz == "TL" || c.SDoviz == "TL")
    		.GroupBy(c => c.Kasa)
    		.Select(c => new 
    		{
    			KasaId = c.Key.Id,
    			HesapAd = c.Key.HesapAdi,
    			Alacak = c.Where(gc => gc.ADoviz =="TL").Sum(g => (decimal?)g.Alacak)??0M,
    			Borc = c.Where(gc => gc.SDoviz =="TL").Sum(g => (decimal?)g.Borc)??0M,
    		});
    
    var sonuc = kTutar.Union(dTutar)
    .GroupBy(t => new { t.KasaId, t.HesapAd })
    .Select(t => new
    {
    	HesapAd = t.Key.HesapAd,
    	Bakiye = t.Sum(tg => tg.Borc - tg.Alacak)
    });
    
    return sonuc.ToList(); // sonuc anonymous, muhtemelen dynamic'e cast etmek istersin
    
    // return sonuc.Cast<dynamic>().ToList();

    mrb,

    sabah oturdum sil baştan yeniden oluşturdum.

    EDM yi desteklemez diyor,

    hata msj,

    Additional information: Unable to cast the type 'Anonymous type' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.


    • Düzenleyen canleveent 1 Mayıs 2019 Çarşamba 09:38
    1 Mayıs 2019 Çarşamba 09:32
  • Linq To SQL kullanabilirsin (SQL Server kullandigina gore neden kullanmıyorsun bilmiyorum). Ya da AsEnumerable ile lokale alabilirsin o zaman EF derdin kalmaz.
    • Yanıt Olarak İşaretleyen canleveent 1 Mayıs 2019 Çarşamba 11:32
    1 Mayıs 2019 Çarşamba 09:40
    Moderatör
  • çok zahmet verdim, üzgünüm. nihayetinde sonuca ulaştım.

    hk.bagışlayın,

    1 Mayıs 2019 Çarşamba 11:34
  • Oncelikle senin tablolar biraz düzeltelim, bu haliyle sanki iliskileri yokmuş gibi duruyor, bir de Linq classlari oluşturulurken iliskiler olmadigindan "navigasyon" propertyleri olmayacak (Linq'da Join islemi nadiren gerekiyor, buradaki Join cok gereksiz):

    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [DVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [KasaId] [INT] NULL REFERENCES Hesaplar (Id)
    	ON DELETE SET NULL ON UPDATE CASCADE,
        [GHareket] [NVARCHAR](10) NULL,
        [CHareket] [NVARCHAR](10) NULL,
        [SDoviz] [NVARCHAR](10) NULL,
        [ADoviz] [NVARCHAR](10) NULL,
        [Tarih] [DATE] NULL,
        [Borc] [DECIMAL](12, 2) NOT NULL,
        [Alacak] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [HesapId] [INT] NULL,
        CONSTRAINT [PK_DVeri]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [KVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [Doviz] [NVARCHAR](10) NULL,
        [Hareket] [NVARCHAR](10) NULL,
        [KasaId] [INT] NOT NULL REFERENCES Hesaplar (Id),
        [HesapId] [INT] NOT NULL,
        [Tarih] [DATE] NULL,
        [Tutar] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [Borc] [DECIMAL](12, 2) NULL,
        [Alacak] [DECIMAL](12, 2) NULL,
        CONSTRAINT [PK_KVERİ]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    
    INSERT INTO Hesaplar
    (
        HesapAdi
    )
    VALUES
    ('bonus'),
    ('world'),
    ('axess'),
    ('nakit'),
    ('özel'),
    ('tüzel'),
    ('Hasan'),
    ('kaan'),
    ('öznel'),
    ('yunus'),
    ('mustafa'),
    ('tuncay'),
    ('ismail');
    
    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 1, 5, '2019-01-15', 750.00, 'Test', 0.00, 750.00),
    ('TL', 'Kasa Giriş', 1, 3, '2019-01-20', 850.00, 'Test', 850.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 7, '2019-01-21', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 8, '2019-01-22', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Çıkış', 1, 9, '2019-01-23', 1500.00, 'Test', 0.00, 1500.00),
    ('TL', 'Kasa Giriş', 1, 13, '2019-01-24', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 11, '2019-01-25', 2000.00, 'Test', 2000.00, 0.00),
    ('USD', 'Kasa Çıkış', 2, 5, '2019-01-16', 150.00, 'Test', 0.00, 350.00),
    ('TL', 'Kasa Giriş', 2, 3, '2019-01-21', 850.00, 'Test', 350.00, 0.00);
    
    INSERT INTO DVeri
    (
        KasaId,
        GHareket,
        CHareket,
        SDoviz,
        ADoviz,
        Tarih,
        Borc,
        Alacak,
        Aciklama,
        HesapId
    )
    VALUES
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-12', 530.00, 100.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-13', 1060.00, 200.00, 'SATIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'TL', 'USD', '2019-01-14', 100.00, 540.00, 'ALIŞ', 0),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-15', 550.00, 110.00, 'SATIŞ', 0);

    Diagramla göstermektesin gerekirse:

    Hesaplar ( Id ) +--------< 0...*  KVeri ( HesapId )
                          |
                          +--------< 0...*  DVeri ( HesapId )

                          

    Hocam DVeri tablosunda Kasald foreign key, hesapld de foreign key olması lazım. Bunun için nasıl bir yol olması lazım. Cok uğraştım ama çözüm uretemedim. Buna öneriniz olurmu
    • Düzenleyen canleveent 1 Mayıs 2019 Çarşamba 19:56
    1 Mayıs 2019 Çarşamba 19:54
  • Sorularini anlamak muamma. Yukaridaki kodda var zaten nasıl yapacağın, sadece biraz mantigini gözden gecirseydin yeterdi. Senin verdigin haliyle olmaz tabii ki. Hem iliskili olsun istiyorsun, hem de iliskisiz veri ekliyorsun.

    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
    	[HesapKodu] VARCHAR(10) null, 
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [DVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [KasaId] [INT] NULL REFERENCES Hesaplar (Id),
        [GHareket] [NVARCHAR](10) NULL,
        [CHareket] [NVARCHAR](10) NULL,
        [SDoviz] [NVARCHAR](10) NULL,
        [ADoviz] [NVARCHAR](10) NULL,
        [Tarih] [DATE] NULL,
        [Borc] [DECIMAL](12, 2) NOT NULL,
        [Alacak] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [HesapId] [INT] NULL REFERENCES Hesaplar (Id)
    	ON DELETE SET NULL ON UPDATE CASCADE,
        CONSTRAINT [PK_DVeri]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [KVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [Doviz] [NVARCHAR](10) NULL,
        [Hareket] [NVARCHAR](10) NULL,
        [KasaId] [INT] NOT NULL REFERENCES Hesaplar (Id),
        [HesapId] [INT] NOT NULL,
        [Tarih] [DATE] NULL,
        [Tutar] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [Borc] [DECIMAL](12, 2) NULL,
        [Alacak] [DECIMAL](12, 2) NULL,
        CONSTRAINT [PK_KVERİ]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    
    INSERT INTO Hesaplar
    (
        HesapAdi
    )
    VALUES
    ('bonus'),
    ('world'),
    ('axess'),
    ('nakit'),
    ('özel'),
    ('tüzel'),
    ('Hasan'),
    ('kaan'),
    ('öznel'),
    ('yunus'),
    ('mustafa'),
    ('tuncay'),
    ('ismail');
    
    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 1, 5, '2019-01-15', 750.00, 'Test', 0.00, 750.00),
    ('TL', 'Kasa Giriş', 1, 3, '2019-01-20', 850.00, 'Test', 850.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 7, '2019-01-21', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 8, '2019-01-22', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Çıkış', 1, 9, '2019-01-23', 1500.00, 'Test', 0.00, 1500.00),
    ('TL', 'Kasa Giriş', 1, 13, '2019-01-24', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 11, '2019-01-25', 2000.00, 'Test', 2000.00, 0.00),
    ('USD', 'Kasa Çıkış', 2, 5, '2019-01-16', 150.00, 'Test', 0.00, 350.00),
    ('TL', 'Kasa Giriş', 2, 3, '2019-01-21', 850.00, 'Test', 350.00, 0.00);
    
    INSERT INTO DVeri
    (
        KasaId,
        GHareket,
        CHareket,
        SDoviz,
        ADoviz,
        Tarih,
        Borc,
        Alacak,
        Aciklama,
        HesapId
    )
    VALUES
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-12', 530.00, 100.00, 'SATIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-13', 1060.00, 200.00, 'SATIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'TL', 'USD', '2019-01-14', 100.00, 540.00, 'ALIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-15', 550.00, 110.00, 'SATIŞ', null);
    

    • Yanıt Olarak İşaretleyen canleveent 2 Mayıs 2019 Perşembe 19:19
    2 Mayıs 2019 Perşembe 12:51
    Moderatör
  • hocam, ben bunu c# tarafında code first ile oluşturdum.

    orada baglantı oluşturmak istediğimde,

    ______________________________

    at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
    ClientConnectionId:15c84489-dbda-409f-bcf8-53dcede720a2
    Error Number:5074,State:1,Class:16
    nesne 'FK_DVeriler_Hesaplar' öğesi sütun 'HesapId' öğesine bağımlı.
    Bir veya daha fazla nesne bu sütuna eriştiğinden ALTER TABLE DROP COLUMN HesapId başarısız oldu.
    PM>

    ____________________________________

    hatası veriyor. 



    • Düzenleyen canleveent 2 Mayıs 2019 Perşembe 13:51
    2 Mayıs 2019 Perşembe 13:24
  • Mesajlari oku. Soyluyor zaten.

    Sana kodu verdim yukarıda, illa code first migrations ile yapacaksan mesajları takip et.

    • Yanıt Olarak İşaretleyen canleveent 2 Mayıs 2019 Perşembe 19:19
    2 Mayıs 2019 Perşembe 13:33
    Moderatör
  • sizin kodlarınızla test db. de çok güzel çalıştı. aynısı gibi olan başka çalıştığım projede,

    c# tarafında ne yaptımsa hata msj verdi.


    hata msj;

    _____________________________

    at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
    ClientConnectionId:15c84489-dbda-409f-bcf8-53dcede720a2
    Error Number:5074,State:1,Class:16
    nesne 'FK_DVeriler_Hesaplar' öğesi sütun 'HesapId' öğesine bağımlı.
    Bir veya daha fazla nesne bu sütuna eriştiğinden ALTER TABLE DROP COLUMN HesapId başarısız oldu.
    PM>

    ________________________________;




    2 Mayıs 2019 Perşembe 17:57
  • Bu benim yazdigimdan çok farkli.
    2 Mayıs 2019 Perşembe 17:59
    Moderatör
  • Hata mesajı C# kodunda migrations'dan geliyor ve söylediği açık, bagimliliklar nedeniyle o kolon kaldirilamaz diyor. SQL koduna bakmadım.
    2 Mayıs 2019 Perşembe 18:18
    Moderatör
  • Sorularini anlamak muamma. Yukaridaki kodda var zaten nasıl yapacağın, sadece biraz mantigini gözden gecirseydin yeterdi. Senin verdigin haliyle olmaz tabii ki. Hem iliskili olsun istiyorsun, hem de iliskisiz veri ekliyorsun.

    CREATE TABLE [Hesaplar]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [HesapAdi] [NCHAR](10) NULL,
    	[HesapKodu] VARCHAR(10) null, 
        CONSTRAINT [PK_Hesap]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [DVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [KasaId] [INT] NULL REFERENCES Hesaplar (Id),
        [GHareket] [NVARCHAR](10) NULL,
        [CHareket] [NVARCHAR](10) NULL,
        [SDoviz] [NVARCHAR](10) NULL,
        [ADoviz] [NVARCHAR](10) NULL,
        [Tarih] [DATE] NULL,
        [Borc] [DECIMAL](12, 2) NOT NULL,
        [Alacak] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [HesapId] [INT] NULL REFERENCES Hesaplar (Id)
    	ON DELETE SET NULL ON UPDATE CASCADE,
        CONSTRAINT [PK_DVeri]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    CREATE TABLE [KVeri]
    (
        [Id] [INT] IDENTITY(1, 1) NOT NULL,
        [Doviz] [NVARCHAR](10) NULL,
        [Hareket] [NVARCHAR](10) NULL,
        [KasaId] [INT] NOT NULL REFERENCES Hesaplar (Id),
        [HesapId] [INT] NOT NULL,
        [Tarih] [DATE] NULL,
        [Tutar] [DECIMAL](12, 2) NOT NULL,
        [Aciklama] [NVARCHAR](50) NULL,
        [Borc] [DECIMAL](12, 2) NULL,
        [Alacak] [DECIMAL](12, 2) NULL,
        CONSTRAINT [PK_KVERİ]
            PRIMARY KEY CLUSTERED ([Id] ASC)
            WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
                  ALLOW_PAGE_LOCKS = ON
                 ) ON [PRIMARY]
    ) ON [PRIMARY];
    
    
    INSERT INTO Hesaplar
    (
        HesapAdi
    )
    VALUES
    ('bonus'),
    ('world'),
    ('axess'),
    ('nakit'),
    ('özel'),
    ('tüzel'),
    ('Hasan'),
    ('kaan'),
    ('öznel'),
    ('yunus'),
    ('mustafa'),
    ('tuncay'),
    ('ismail');
    
    INSERT INTO KVeri
    (
        Doviz,
        Hareket,
        KasaId,
        HesapId,
        Tarih,
        Tutar,
        Aciklama,
        Borc,
        Alacak
    )
    VALUES
    ('USD', 'Kasa Çıkış', 1, 5, '2019-01-15', 750.00, 'Test', 0.00, 750.00),
    ('TL', 'Kasa Giriş', 1, 3, '2019-01-20', 850.00, 'Test', 850.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 7, '2019-01-21', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 8, '2019-01-22', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Çıkış', 1, 9, '2019-01-23', 1500.00, 'Test', 0.00, 1500.00),
    ('TL', 'Kasa Giriş', 1, 13, '2019-01-24', 2000.00, 'Test', 2000.00, 0.00),
    ('TL', 'Kasa Giriş', 1, 11, '2019-01-25', 2000.00, 'Test', 2000.00, 0.00),
    ('USD', 'Kasa Çıkış', 2, 5, '2019-01-16', 150.00, 'Test', 0.00, 350.00),
    ('TL', 'Kasa Giriş', 2, 3, '2019-01-21', 850.00, 'Test', 350.00, 0.00);
    
    INSERT INTO DVeri
    (
        KasaId,
        GHareket,
        CHareket,
        SDoviz,
        ADoviz,
        Tarih,
        Borc,
        Alacak,
        Aciklama,
        HesapId
    )
    VALUES
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-12', 530.00, 100.00, 'SATIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-13', 1060.00, 200.00, 'SATIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'TL', 'USD', '2019-01-14', 100.00, 540.00, 'ALIŞ', null),
    (1, 'Kasa Giriş', 'Kasa Çıkış', 'USD', 'TL', '2019-01-15', 550.00, 110.00, 'SATIŞ', null);


    hocam yukardaki verilere göre şöyle bir sql sorgusu yazdım ama,
    with [data] ( HesapAdi,Bakiye) as
    (select HesapAdi, sum(Borc)- sum(0) as Bakiye from DVeri join Hesaplar on KasaId=Hesaplar.Id where DVeri.ADoviz='TL'  group by HesapAdi
    union all
    
    select HesapAdi, sum(Borc)- sum(0) as Bakiye from DVeri join Hesaplar on HesapId=Hesaplar.Id where DVeri.SDoviz='TL'  group by HesapAdi
    union all
    
    select HesapAdi, 
    sum(case when Hareket='Kasa Giriş' then Tutar else 0 end) - 
    sum(case when Hareket='Kasa Çıkış' then Tutar else 0 end) as Bakiye from KVeri
    join Hesaplar on KasaId=Hesaplar.Id where Doviz='TL' group by HesapAdi )
    select HesapAdi,  Bakiye 
    from [data]ok group by HesapAdi,Bakiye
    
    
    /////
    HesapAdi	Bakiye
    bonus     	100.00
    bonus     	1590.00
    bonus     	7350.00
    world     	550.00
    world     	850.00

    Hesap adında grublama benzersiz Id HesapAdi olarak toplatamadım, hepsini  group by'a nasıl alırız,

    3 Mayıs 2019 Cuma 13:10
  • Dediğim gibi, sorularını anlamak muamma :( Yine ne istediğin belli degil.

    Sum(Borc)-Sum(0) => ??????? Istedigin kadar siniri topla, sonuc sifirdir. Sum(0) ne alaka? 

    Bir kere o yukarıdaki verilere gore, o kodla, oyle bir sonuc çıkmaz. Hadi diyelim ki cikti, eksik ve yanlış olur.

    with [data] ( HesapId,Tutar) as
    (
    SELECT KasaId, Borc
    from DVeri 
    WHERE ADoviz='TL'  
    union all
    select HesapId, Borc
    from DVeri 
    WHERE SDoviz='TL'  
    UNION all
    select KasaID, 
    case 
    	WHEN Hareket='Kasa Giriş' then Tutar
    	when Hareket='Kasa Çıkış' then -Tutar 
    	else 0 end
    FROM KVeri
    WHERE Doviz='TL' 
    )
    SELECT h.HesapAdi, SUM(d.Tutar) AS Bakiye 
    FROM [data] d
    left JOIN Hesaplar h ON h.Id = d.HesapId
    GROUP BY h.HesapAdi;

    • Yanıt Olarak İşaretleyen canleveent 3 Mayıs 2019 Cuma 15:28
    3 Mayıs 2019 Cuma 14:13
    Moderatör
  • Sum(Borc)-Sum(0) => ??????? Istedigin kadar siniri topla, sonuc sifirdir. Sum(0) ne alaka?  bunun sonucu ,sıfır olamaz,

    borç toplamı gelir. çarpmıyorum, bölmüyorum, çıkartma ve toplamada da 0 etkisizdir.

    iş matematik olunca ben de varım, :)




    3 Mayıs 2019 Cuma 14:34
  • Dediğim gibi, sorularını anlamak muamma :( Yine ne istediğin belli degil.

    Sum(Borc)-Sum(0) => ??????? Istedigin kadar siniri topla, sonuc sifirdir. Sum(0) ne alaka? 

    Bir kere o yukarıdaki verilere gore, o kodla, oyle bir sonuc çıkmaz. Hadi diyelim ki cikti, eksik ve yanlış olur.

    with [data] ( HesapId,Tutar) as
    (
    SELECT KasaId, Borc
    from DVeri 
    WHERE ADoviz='TL'  
    union all
    select HesapId, Borc
    from DVeri 
    WHERE SDoviz='TL'  
    UNION all
    select KasaID, 
    case 
    	WHEN Hareket='Kasa Giriş' then Tutar
    	when Hareket='Kasa Çıkış' then -Tutar 
    	else 0 end
    FROM KVeri
    WHERE Doviz='TL' 
    )
    SELECT h.HesapAdi, SUM(d.Tutar) AS Bakiye 
    FROM [data] d
    left JOIN Hesaplar h ON h.Id = d.HesapId
    GROUP BY h.HesapAdi;

    herşeye ragmen size ne kadar teşekkür etsek azdır,

    syg,

    3 Mayıs 2019 Cuma 15:29
  • "herseye ragmen", "bunun sonucu, sıfır olamaz", "matematik olunca ben de varım" ? Hayirdir, cok manidar olmuş.

    Sum(0) sonucu her zaman sifirdir - istisnai tek durum kriterlere uyan veri olmamasıdır. Sonucu sıfır olamaz derken herhalde kriterlere uyan veri yok demek istedin, eğer öyleyse bosuna neden "select Sum(Borc) ... where .." cagiriyorsun ki? Nasıl olsa kritere uyan veri yok madem, sonuc her zaman sabit.

    Ornek:

    SELECT SUM(0)
    FROM dbo.[Order Details]
    WHERE ProductId = 1;
    
    -- 0
    
    SELECT SUM(0)
    FROM dbo.[Order Details]
    WHERE ProductId = -1;
    
    -- NULL

    • Yanıt Olarak İşaretleyen canleveent 3 Mayıs 2019 Cuma 18:39
    3 Mayıs 2019 Cuma 17:06
    Moderatör
  • Bildiğiniz üzere

    Union kullanım da = sutun olması gerekiyor. Borc ve alacak tutarına bakip bakiyesi ni anlamak için kullanıyordum. 

    Onu yine kullanacağız. Mecburen. Bu sorgu bizim olmazsa olmazımiz.

    Sadece 0 yazariz.

    Bu sorgu başka nasıl yapılır, bilmiyorum ama şuan en iyisi.

    Şöyle format olacak

    Hesap adı .    Borc.      Alacak .    B.bakiye .   A.bakiye



    3 Mayıs 2019 Cuma 18:33
  • Ben hakikaten seni anlayamıyorum. O sum(0)'in en ufak bir katkisi yok ya sen bilirsin.

    3 Mayıs 2019 Cuma 19:32
    Moderatör