varmıdır böyle bir sql sorgusu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

varmıdır böyle bir sql sorgusu

Mesaj gönderen esistem »

arkadaşlar merhaba, yapmak istediğim bir olay var fakat bir türlü işin içinden çıkamadım,
elimde 4 adet tablo var,
1. CARI tablosu alanları ; kod, unvan olsun
2. CARI_GRUP1 tablosu alanları ; kod, adi
3. CARI_GRUP2 tablosu alanları ; kod, cari_grup1_kodu, adi
4. CARI_GRUPLAR tablosu alanlari ; kod, cari_kodu, cari_grup1_kodu, cari_grup2_kodu

Cari hesapları kaydederken sınırsız sayıda grup kaydedebilmek adına böyle bir sistem yaptım, örnek vermek gerekirse;
mesela kodu 1 olan ahmet adında bir cari hesap kaydımız olsun, gruplarımızda ;
cari_grup1 tablosunda kodu 1 olan grubumuz Ana grup olsun, cari_grup2 tablosunda Bu ana gruba bağlı, Alıcı,Satıcı,Per.Müşteri,Nakit Satıcı vs.vs. alt gruplarımız olsun ayrıca da cari_grup1 tablosunda BOLGE adında kodu 2 olan başka bir ana grup olsun ve buna bağla cari_grup2 tablosunda Merkez, Adana, Tekirdağ vs.vs. alt gruplar olsun, bunlarıda her cari hesabın CARI_GRUPLAR tablosuna kaydedelim, yani sonuçta kodu 1 olan AHMET cari hesabı hem Alıcı hemde ADANA gruplarına dahil olmuş olsun diyelim. Benim istediğim cari hesapları grid de gösterirken kodu, adı ve grubu şeklinde göstermek, yani ;
1 AHMET Alıcı-Adana şeklinde görünsün istiyorum ama join kullanarak göstermeye kalktığımda, cari hesap hem ALICI hemde ADANA grubuna dahil olduğu için left join ile gösterinde şu çıktıyı alıyorum;

1 AHMET Alıcı
1 AHMET Adana

şekllinde iki kayıt veriyor, iç içe select komutu ile bu işlem yapılaibilir sanırım ama bir türlü çözemedim, yardımcı olabilirseniz ne mutlu bana.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen adelphiforumz »

benim önerim çok çıkamaz durumda değilsin fakat işini bir an önce halletmek istersen aşağıdaki yöntemi kullan sonra daha iyisini bulduğunda değiştirirsin.
Bir alt fonksiyon hazırla bu fonksiyona parametre gönder ve dönüş değerini field olarak al
kolay gelsin
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen esistem »

adelphiforumz merhaba;
sorunu bir şekilde çözebilirim sanırım ama az önce böyle bir yapıyı bu şekilde kullanmanın yanlış olacağı kanısına vardım, zira cari hesap grupları olarak onlarca grup girilebilicek sisteme bunun sonucunu tek satırda göstermek mantıksızlık olucaktır, her kayıt 50 karakter alan kaplıyor çünkü 10 alt grup 50*10 500 karakter yapacaktır bunuda tek bir alana zaten toplayamam, onun yerine cari tablosuna bağlı gruba isimleri alıp başka bir gridde gösterme yoluna gidicem sanırım, bir şekilde çözücem ama bakalım nasıl olucak bende merak ediyorum
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen aslangeri »

s.a.
grpların dinamik olduğu için sorgularını-raporlarını da dinamik olarak düşünmen lazım.
rapor alınmadan önce raporda hangi grupların olacağını belirlemesin(dinamik bir yapıda bu işi son kullanıcıya yaptırmalısın)
daha sonra belirlediğin bu grupları stun başlığı olacak şekilde her sutun için bir join veya alt sorgu ile raporunu hazırlamalısın.
verdiğin örnekten yola çıkacak olursak kullanıcı rapor hazırlık ekranında raporda 1 ve 2 kodlu grupları rapora dahil etmiş ve bu alanlara göre filitre vermiş olsun.
Not: grup adlarinin degerlerini vermediğin için 1-> Turu, 2-> bolgesi olarak alacağım.

Kod: Tümünü seç

Select cari.kod,cari.unvan,turu_1.adi as Turu, turu_2.adi as Bolgesi, turu_n.adi as XXX
from CARI cari
left join CARI_GRUPLAR grup_1 on grup_1.cari_kodu=cari.kodu and grup_1.cari_grup1_kodu=1/*1->turu bunu hazırlık ekrnaında belirledik*/
left join CARI_GRUP2 turu_1 on turu_1.kod=grup_1.cari_grup2_kodu 
left join CARI_GRUPLAR grup_2 on grup_2.cari_kodu=cari.kodu and grup_2.cari_grup1_kodu=2/*2-> bolge bunu hazırlık ekranında belirledik*/
left join CAR_GRUP2 turu_2 on turu_2.kod=grup_2.cari_grup2.kodu
left join CARI_GRUPLAR grup_n on grup_n.cari_kodu=cari.kodu and grup_n.cari_grup1_kodu=n/*n-> XXX bunu hazırlık ekranında belirlemelisin*/
left join CAR_GRUP2 turu_n on turu_n.kod=grup_n.cari_grup2.kodu
kodları editörden yazdım ondan dolayı hata olabilir. mantık olarak bu şekilde olacak.
buna birde where şartı eklemek istersen iki yol var. 1. si left joinleri inner join yaparsın turu_n in filtrelsine ilgili alanları yazarsın. ikinci yol yukardaki sorguyu view olarak alırsın sonuna where eklersin.

Kod: Tümünü seç

 select * from (.....yukarda yazan kodlar.....) as TumListe where Alanadi='değeri'
gibi.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2356
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen freeman35 »

cari tablona kaç grup varsa okadar field ekle, her gruba ayrı table yap. Grup table lar birbirinden bağımsız olsun. Cari table a kayıt girerken kullanıcı her grubu zaten kendisi seçer, bu kullanıcıya daha kolay gelir, yoksa her şehir için grub2 tanımla sonra bu row ların herbirine nakit çek vs ekle hiç kimse uğraşmaz.

Kod: Tümünü seç

ahmet, grup1, grup2, grup3, ...  -> master
       adana, satıcı, nakit, ....  -> her biri ayrı detay table lar
ekrana göstermek içinde sql içine, her bir grup için bir join eklersin
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 !!!
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen esistem »

Selamlar;
freeman35 ve aslangeri önerileriniz için teşekkürler, ben sorunu kendimce çözdüm, ekranda bir alt query de cari hesabın dahil olduğu grupları gösteriyorum.
arama işleminde ise farklı ve bana göre daha basit bir yol izledim. Önce cari hesap seçilip değiştirilirken veya yeni cari hesap oluşturulurken kullanıcının seçtiği grupları önce bir mem table ya atıp hesap kaydedilirkende ana grup tablosuna atıyorum ve aynı zamanda cari hesap tablosuna grup adında bir varchar(200) alan açtım, kullanıcı hangi grubu (grupları) seçmişse bunları döngüye sokup bu alana kodlarını kafama göre formatlı bir şekilde atıyorum, mesela 1,2 ve 7 nolu gruplar seçilmiş olsun ben bunu tablodaki alana ,1,,2,,7, şeklinde atıyorum, kullanıcıda diyelim ben ana grubu satıcı olan, bölgesi edirne olan rut u kırklareli olan grubu istiyorum dediğinde (bunları master detail tablolardan kendi yazmış olduğum ibcombobox ile seçtiriyorum) her birini seçtiğinde bunların kodlarını bir listbox a atıp o listbox u döngüye sokup sql sorgusunu oluşturuyorum, hatta daha da ileriye gidip aynı gruplar varsa "OR" ile sql sorgusu yapıp gayet güzel bir şekilde sonuçları alıyorum. Açıklık getirmek (açıklama gereği duyduğum) istediğim durum ise freeman35 in yazmış olduğu grup çözümünedir.

Önceden bende de her grup için bir tablo ve cari hesap tablosunda buna denk gelen bir alan vardı, fakat geçenlerde programı isteyen bir müşteri oldu ama bende stoklarda tanımlı 3 grup vardı müşterim istedi 5 grup, oturup buna ilave yapmaktansa bende şöyle bir yol buldum.(isteyen arkadaşlar kullanabilir diye yazıyorum)

Bende stoklar için mesela 2 grup tablom var.
GRUP1 tablosu alanları (KOD,ADI)
GRUP2 tablosu alanları (KOD,GRUP1KODU,ADI)
birde stok tablosuna bağlı STOK_GRUP tablom var alanları (KOD,STOKKODU,GRUP1KODU,GRUP2KODU) şeklinde
mesela GRUP1 tablomda Marka isimli grubum, bunun altında GRUP2 tablomda X markası, Y markası, Z markası şeklinde kayıtlar var
yine GRUP1 tablomda Model isimli grubum, bunun altında GRUP2 tablomda X modeli, Y modeli, Z modeli şeklinde kayıtlar var
yine GRUP1 tablomda Renk isimli grubum, bunun altında GRUP2 tablomda X rengi, Y rengi, Z rengi şeklinde kayıtlar var,
kısacası sınırsız sayıda ana grup ve alt grup oluşturabilirsiniz. Aynı zamanda program bu gruplara göre otomatik barkod atıyor, yani ürün barkodunda marka,model,renk,beden,numara vs.vs. istediğiniz herşey oluyor, stok tablosundaki grup alanına da her zaman grup2 kodunu yazdığım için bulması, araması çok daha kolay oluyor, sql sorgusunu oluşturuken aynı ana gruba bağlı alt grupları OR ile ayrı olanları AND ile çekincede şöyle bir sorgu almanız çok kolay oluyor,
Kullanıcı şu markanın şu modelinin şu veya şu renkte olanlarını bana getir diyebiliyor.

Kısaca yapmak istediğim buydu ve sonunda oldukça güzel bir şekilde becerdim.
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen yusuf simsek »

@freeman35 'in dediği gibi tablo yapını değiştirirsen ileride karşılaşabileceğin birçok sorunun önünce geçmiş olursun...

Şunu da unutma ki son kullanıcı ( istisnalar hariç ) sınırsız gruplama bir yana, yaptığı tahsilatı bilgisayara işlerken 10 kere düşünür ;)
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen esistem »

yusuf bey merhaba;
doğrusu son kullanıcılar hakkında söylediklerinizde haklısınız ama şu an benden istekte bulunan 2 müşterim gibi müşterileriniz olsa inanın sizde hak verirsiniz :) ki ben oldukça memnunum zira ikiside aç kurt gibi ha bire istiyolar :) basit bir ticari program yapalım diye başladık fakat şu an öyle bir hal aldıki ben bile inanamıyorum. El terminali ile sıcak/soğuk (onlar öyle diyor) satış, iphone ve android den erişim ile sıcak/soğuk satış, web üzerinde 3 mağazanın cari hesap hareketleri ve stok kontrolleri, uzaktan sipariş alma, müşterilere şifre verilip uzaktan sipariş girişi, müşterilerin kendi cari hesaplarını takibi, sıfırdan barkodlama sistemi, satıcıların primlerinin kontrolleri, dağıtıcıların primlerinin kontrolü vs.vs. alabildiğine genişliyor mecbur kaldım böyle bir sistem oluşturmaya ve çok şükür her iki kullanıcıda canavar gibi maşallah :)

Ve allah izin verirse 1-2 aya kadar sitemde satışına da başlıcam programın, bakalım sonuç ne olacak.
yusuf simsek
Üye
Mesajlar: 330
Kayıt: 09 Mar 2004 11:18
Konum: Konya
İletişim:

Re: varmıdır böyle bir sql sorgusu

Mesaj gönderen yusuf simsek »

Hayırlısı olsun İnşallah. Rabbim emeklerini karşılıksız bırakmasın.
Bugün bir kez daha,
Hiç Birşey Bilmediğimi Öğrendim!!!

https://extrayazilim.com
Cevapla