SQL ile sınırı aşan kayıtları yakalamak

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
tahirsalt
Üye
Mesajlar: 1
Kayıt: 14 May 2017 04:37

SQL ile sınırı aşan kayıtları yakalamak

Mesaj gönderen tahirsalt » 14 May 2017 04:43

Selamlar Arkadaşlar,

HSPKOD Fisno aciklama Borc Alacak
600.10 1 A Ltd. Null 6500
391.10 1 A Ltd. Null 1000
100.10 1 A Ltd. 7500 Null

600.10 1 A Ltd. Null 6500
391.10 1 A Ltd. Null 1000
120.10 1 A Ltd. 7500 Null

600.10 2 B Ltd. Null 6700
391.10 2 B Ltd. Null 1200
100.10 2 B Ltd. 7900 Null

Önce derdimi muhasebe diliyle anlatayım: genel muhasebeyi bilenler bilir. Bankadan geçmesi gereken devletin açıkladığı "7000" TL sınırını aşan işlemleri yakalamaya çalışıyorum. Elimde üstteki gibi örnek bir tablo var.

Bu tabloda bankadan geçmesi gerekirken kasadan ödenmiş 2 fatura görüyorum. A Ltd. ve B Ltd. yapılan satışlardan "100.10" kapatılmış iki kayıt vergi cezası gerektiriyor. (Cezası Kanuna göre 2 x 1300= 2600 TL) Şimdi binlerce kayıt içinden bu kayıtları SQL sorgusu ile yakalamak istiyorum.

Şimdide yazılımcı arkadaşların diliyle yazmaya çalışayım: "Borc">7000 büyük olan "HSPKOD" 100% başlayalar ile "Alacak">6000 büyük olan "HSPKOD" 600% ile başlayalardan "Fisno" ve "aciklama" ları aynı olanların listelenmesini istiyorum.

Aşağıdaki gibi bu şartlara uyan HSPKOD "100%" olanlar listelense yeterli veya bunu yakalayabilecek bir sonuç...

HSPKOD Fisno aciklama Borc Alacak
100.10 1 A Ltd. 7500 Null
100.10 2 B Ltd. 7900 Null

2 günlük araştırma sonucunda üstteki sonuca yaklaşabilmiş değilim. :(


create table table1 (HSPKOD varchar(30), Fisno int, aciklama varchar(30), Borc varchar(30), Alacak varchar(30))
INSERT INTO table1 (HSPKOD, Fisno, aciklama, Borc, Alacak)
values
(600.10,1,'A Ltd.',Null,6500),
(391.10,1,'A Ltd.',Null,1000),
(100.10,1,'A Ltd.',7500,Null),

(600.10,1,'A Ltd.',Null,6500),
(391.10,1,'A Ltd.',Null,1000),
(120.10,1,'A Ltd.',7500,Null),

(600.10,2,'B Ltd.',Null,6700),
(391.10,2,'B Ltd.',Null,1200),
(100.10,2,'B Ltd.',7900,Null);



GROUP BY HAVING COUNT(*)>1 ile ilgili birşeyler buldum ama onuda başaramadım :(

Select Fisno, aciklama, COUNT(*) from table1
where (HSPKOD LIKE '1%' and Borc >120) or
(HSPKOD LIKE '6%' and Alacak >100)
GROUP BY Fisno, aciklama having COUNT(*) > 1

Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2089
Kayıt: 12 Haz 2003 03:05
Konum: merkez camii yanı

Re: SQL ile sınırı aşan kayıtları yakalamak

Mesaj gönderen freeman35 » 14 May 2017 06:48

tahirsalt yazdı: Şimdide yazılımcı arkadaşların diliyle yazmaya çalışayım: "Borc">7000 büyük olan "HSPKOD" 100% başlayalar ile "Alacak">6000 büyük olan "HSPKOD" 600% ile başlayalardan "Fisno" ve "aciklama" ları aynı olanların listelenmesini istiyorum.

Aşağıdaki gibi bu şartlara uyan HSPKOD "100%" olanlar listelense yeterli veya bunu yakalayabilecek bir sonuç...
Sorunun cevabını yazmışsın sen zaten. Program yazmak öğrenmekse niyetin, bilgisayarla yer değiştir, yazdığın koduda bilgisayarmışsın gibi kendin çalıştır.
ilk koşulun belli zaten "Borc">7000" ikincisi de "Alacak">6000" soru: sana hangisi lazım? ikiside, burdan sonrasıda basit konuşuyormuşsun gibi, where her satır için çalıştırılacak ona göre soruyu sor.
satırdaki (Borc>=7000 VEYA Alacak>=6000) tablona sınır getirdin, devam edeceksen
satırdaki (Borc>=7000 veya Alacak>=6000) VE HSPKOD LIKE 100% satır şartları matemetikteki gibidir. sorgudaki parantezlerde matematikteki gibidir, içten dışa doğru işlenirler.
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!

anemos
Üye
Mesajlar: 104
Kayıt: 02 Nis 2007 06:51
Konum: Sakarya / Hendek

Re: SQL ile sınırı aşan kayıtları yakalamak

Mesaj gönderen anemos » 15 May 2017 05:04

Muhasebeci gözüyle bakmadığınız için kurgularınız yanlış oluyor.
Where şartı her kayıt için baktığından, "Borc" sütununda bir tutar varsa, "Alacak" null' dur.
Alacak tutarının kontrol edileceği hesap kodu "100" değil, "600" dür.

Cevapla