Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Toplamların Toplamını Bulmak

Konu, 'SQL' kısmında tahirsalt tarafından paylaşıldı.

  1. tahirsalt

    tahirsalt Yeni Üye

    Kayıt:
    14 Mayıs 2017
    Mesajlar:
    9
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    Merhabalar,
    create table table1 (HSPKOD varchar(30), Borc float(30), Alacak float(30))
    INSERT INTO table1 (HSPKOD, BORC, ALACAK)
    values
    (600.10,Null,6500),
    (391.10,Null,1000),
    (100.10,7500,Null),

    (600.10,Null,6500),
    (391.10,Null,1000),
    (120.10,7500,Null),

    (600.10,Null,6700),
    (391.10,Null,1200),
    (100.10,7900,Null);

    SELECT HSPKOD, SUM (isnull(Borc,0)) - sum (isnull(Alacak,0)) As Bakiye
    FROM table1 where HSPKOD like '100%' or HSPKOD like '600%' or HSPKOD like '120%'
    GROUP BY HSPKOD
    Üstteki kod ile şuan sonuç şöyle geliyor.
    HSPKOD Bakiye
    100.1015400
    120.107500
    600.10-19700

    İSTEKLERİM

    1.isteğim, üsteki sonucun yanına birde "Kümülatif Bakiye" sütunu olacak.
    HSPKOD Bakiye Kümülatif Bakiye
    100.1015400 3200
    120.107500 3200
    600.10-19700 3200

    2.isteğim, kümülatif bakiye şartta bağlamak . Örneğin Kümülatif bakiye <5000 ise "Şarta uygun değildir." desin. Sanırım onuda yeni bir sütuna yazdıracağız.
    HSPKOD Bakiye Kümülatif_Bakiye Sonuç
    100.1015400 3200 Şarta Uygun Değildir.
    120.107500 3200 Şarta Uygun Değildir.
    600.10-19700 3200 Şarta Uygun Değildir.
    Şimdiden teşekkür ederim.
     
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    236
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Bu biraz uğraştırır beni, fazla vaktim yok o sebeple yol göstereyim.

    SELECT sorgunun sonunu biraz değiştirirsen 3200 rakamını bulursun.
    GROUP BY ROLLUP(HSPKOD)
    şeklinde. Ama alta yeni satır olarak verir.

    Aynı sonucu WHERE den sonra OR ile ayırdığın 3 HSPKOD değeri için ayrı select yaparsanda bulursun ama tek satırda.
    SELECT (
    (SELECT ... WHERE HSPKOD like '100%') +
    (SELECT... like 120) +
    (SELECT ... like 600)
    ) AS kumulatif

    Ayrıca eğer sorgularıda
    IF BEGIN ELSE END
    veya
    CASE WHEN

    bunlarıda incelemen gerekebilir.

    Değişken tanımlayıp sonucu yükleyebilirsin.
    DECLARE @kumulatif bigint;

    SELECT @kumulatif = ( ve üstteki 1+3 select) sonrada
    if (@kümülatif >= 5000) BEGIN select 'uygun' END ELSE BEGIN select 'uygun değil' END
    ama bu sorguda aynı tablo 3 kez ayrı ayrı select ediyor, sağlıklı değil, fikir olsun diye yazdım. Ben Kullanmam.
     
    Son düzenleme: 18 Mayıs 2017
    tahirsalt bunu beğendi.
  3. tahirsalt

    tahirsalt Yeni Üye

    Kayıt:
    14 Mayıs 2017
    Mesajlar:
    9
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    İyi niyetiniz için teşekkür ederim. Üstünde bir çalışayım bakalım bir şey çıkacak mı?
     
  4. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    897
    Beğenilen Mesajlar:
    236
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Yukardaki açıklamamda küçük bir düzeltme yapayım, sonradan aklıma geldi.

    1+3 adet select li çözümde, sorgu tabloyu 3 kez okuyacak demiştim.

    Eğer tabloda ilk key alanı hesap numarası alanı ise yani HSPKOD ise, o zaman sadece toplanması gereken kayıtları key ile ulaşıp okuyacaktır, baştan sona 3 kez taraması gerekmeyecek. Yani o çözüm işe yarıyorsa kullanılabilir.
     
    tahirsalt bunu beğendi.
  5. tahirsalt

    tahirsalt Yeni Üye

    Kayıt:
    14 Mayıs 2017
    Mesajlar:
    9
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    Bir arkadasımız şöyle bir yanıt dönmüş. Ancak çalıştıramadım. :(



    SELECT HSPKOD, Bakiye, Kumulatif,CASEWHEN Kumulatif<5000THEN'Şarta Uygun Değildir.'ELSE'Şarta Uygundur.'ENDAS Uygunmu
    FROM(SELECT HSPKOD, Bakiye,(SELECT SUM(Bakiye)FROM TotalTable)AS Kumulatif
    FROM(SELECT HSPKOD, SUM(ISNULL(Borc,0))- SUM(ISNULL(Alacak,0))AS Bakiye
    FROM table1 WHERE HSPKOD LIKE'100%'OR HSPKOD LIKE'600%'OR HSPKOD LIKE'120%'GROUPBY HSPKOD)AS TotalTable)AS KumulatifTable
     
  6. tahirsalt

    tahirsalt Yeni Üye

    Kayıt:
    14 Mayıs 2017
    Mesajlar:
    9
    Beğenilen Mesajlar:
    1
    Şehir:
    İstanbul
    Sonuca ulaştım... :)Yazılımcı değilim, bu kodlar işlemciyi yorar mı bilemem.

    Benim gibi yeniler için aşamalarımı yazayım:

    1.Aşama
    --HSPKOD ve Bakiye listeledim.
    SELECT HSPKOD, SUM (isnull(Borc,0)) - sum (isnull(Alacak,0)) As Bakiye
    FROM table1 where HSPKOD like '100%' or HSPKOD like '600%' or HSPKOD like '120%'
    GROUP BY HSPKOD

    2. Aşama kumulatifi ekledim
    -- HSPKOD, BAKIYE, Kumulatif
    SELECT Hspkod, SUM(ISNULL(Borc, 0)) - SUM(ISNULL(Alacak, 0)) AS Bakiye,
    (SELECT sum(bakiye) FROM (SELECT Hspkod, SUM(ISNULL(Borc, 0)) - SUM(ISNULL(Alacak, 0)) AS Bakiye
    FROM table1 WHERE Hspkod LIKE '100%' OR Hspkod LIKE '600%' OR Hspkod LIKE '120%'
    GROUP BY Hspkod)AS table2) AS Kumulatif
    FROM table1 WHERE Hspkod LIKE '100%' OR Hspkod LIKE '600%' OR Hspkod LIKE '120%'
    GROUP BY Hspkod

    3. Aşama
    --Şartımız lazım olan tutarı (3200) buldum
    select sum(bakiye) from (
    SELECT HSPKOD, SUM(ISNULL(Borc, 0)) - SUM(ISNULL(Alacak, 0)) AS Bakiye
    FROM table1 WHERE HSPKOD LIKE '100%' OR HSPKOD LIKE '600%' OR HSPKOD LIKE '120%'
    GROUP BY HSPKOD)as table2

    4.Aşama
    -- HSPKOD, BAKIYE, Kumulatif yanına şartı ekledim
    SELECT Hspkod, SUM(ISNULL(Borc, 0)) - SUM(ISNULL(Alacak, 0)) AS Bakiye,
    (SELECT sum(bakiye) FROM (SELECT Hspkod, SUM(ISNULL(Borc, 0)) - SUM(ISNULL(Alacak, 0)) AS Bakiye
    FROM table1 WHERE Hspkod LIKE '100%' OR Hspkod LIKE '600%' OR Hspkod LIKE '120%'
    GROUP BY Hspkod)AS table2) AS Kumulatif, CASE WHEN (select sum(bakiye) from (
    SELECT HSPKOD, SUM(ISNULL(Borc, 0)) - SUM(ISNULL(Alacak, 0)) AS Bakiye
    FROM table1 WHERE HSPKOD LIKE '100%' OR HSPKOD LIKE '600%' OR HSPKOD LIKE '120%'
    GROUP BY HSPKOD)as table2)<5000 Then 'Şarta Uygun Değildir.' ELSE 'Şarta Uygundur.' END AS Uygunmu
    From table1 WHERE Hspkod LIKE '100%' OR Hspkod LIKE '600%' OR Hspkod LIKE '120%'
    GROUP BY Hspkod