varmıdır böyle bir sql sorgusu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
varmıdır böyle bir sql sorgusu
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.
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.
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: varmıdır böyle bir sql sorgusu
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
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
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
Re: varmıdır böyle bir sql sorgusu
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
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
Re: varmıdır böyle bir sql sorgusu
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.
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. gibi.
kolay gelsin.
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
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'
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: varmıdır böyle bir sql sorgusu
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.
ekrana göstermek içinde sql içine, her bir grup için bir join eklersin
kolay gele
Kod: Tümünü seç
ahmet, grup1, grup2, grup3, ... -> master
adana, satıcı, nakit, .... -> her biri ayrı detay table lar
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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: varmıdır böyle bir sql sorgusu
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.
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.
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
Re: varmıdır böyle bir sql sorgusu
@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
Ş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
Re: varmıdır böyle bir sql sorgusu
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.
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.
-
- Üye
- Mesajlar: 330
- Kayıt: 09 Mar 2004 11:18
- Konum: Konya
- İletişim:
Re: varmıdır böyle bir sql sorgusu
Hayırlısı olsun İnşallah. Rabbim emeklerini karşılıksız bırakmasın.