birkaç acemi sql sorusu..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
interboy
Üye
Mesajlar: 84
Kayıt: 18 Mar 2005 02:52

birkaç acemi sql sorusu..

Mesaj gönderen interboy »

arkadaşlar paradox vt kullanıyorum.yapmak istediğim şey basit aslında ama olmuyor.

ana tablomda tüm işlemlerin kaydı tutuluyor.tüm satışların yani.
ben bi rapor gibi bişey sunmak istiyorum. amacım girilen ay daki satışları listelemek.

vt de tarih kolonundaki kayıtlardan ay kısmı 12 olanları mesela..

birde mesela bunu yaptım. 12. aydaki tüm satışları listeledim. peki bu aydaki yapılan satışların sayısını nasıl alabilirim. bu ayda 180 adet satış olmuştur. toplam giriş 1450 ytl dir gibi yapıcam mesela.


bu iki sorguyu nasıl yaparım yardım edermisiniz.

teşekkür ederim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Parakoks için LocalSql diye bir yardım dosyası olacak oradan desteklediği sql yapısına bakabilirsiniz.
İlgili aydaki bilgileri listelemek için;

Kod: Tümünü seç

select * from tablo
where ay = 12
şeklinde sabit sql ile yapabileceğiniz gibi..

Kod: Tümünü seç

select * from tablo
where ay = :AY
ile

Kod: Tümünü seç

Query1.ParamByName('AY').AsInteger := 12;
Query1.Open;
şeklinde parametrik bir yapı ile yapabilirsiniz. Ay bilgisini tarih bilgisinden alacaksanız EXTRACT(MONTH FROM Tarih_Alani) ile ay bilgisini çekilebilirsiniz. Sonuçta sorgu şu şekilde olacak;

Kod: Tümünü seç

select * from tablo
where EXTRACT(MONTH FROM Tarih_Alani) = :AY
Diğer soruda bunların toplamı için

Kod: Tümünü seç

select SUM(satis_tutari) from ... 
ile

Kayıt sayısını da

Kod: Tümünü seç

select count(*) from ... 
ile alabilirsin. Tabi burada where kısmını da yazarak :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
interboy
Üye
Mesajlar: 84
Kayıt: 18 Mar 2005 02:52

Mesaj gönderen interboy »

çok teşekkür ederim hocam. ellerine sağlık.
ben şunu denedim bide: mesela 12. ay listesi sitenildi. ben sorguda

Kod: Tümünü seç

tarih_alani>01.12.2006 and tarih_alani<31.12.2006
gibi sorgulattım aynı sonucu werdi. hangisi daha sağlıklı olur sizce.
bi farkı olurmu yani?

Kod: Tümünü seç

procedure TForm8.Button1Click(Sender: TObject);
var
sqlstatement21:string;
tarih1:string;
tarih2:string;

begin

EDIT2.Text:=INTTOSTR(DaysInAMonth(strtoint(edit4.Text),strtoint(edit3.Text)))+'.'+edit3.Text+'.2006';
edit1.text:='01.'+edit3.Text+'.'+edit4.Text;

tarih1:=edit1.text;
tarih2:=edit2.text;

sqlstatement21:=FORMAT('SELECT * FROM eylul WHERE G_tar> %s  AND G_tar< %s or G_tar= %s or G_tar= %s',[''''+tarih1+'''',''''+tarih2+'''',''''+tarih1+'''',''''+tarih2+'''']);

QUERY1.Close;
QUERY1.SQL.Clear;
QUERY1.SQL.Add(sqlstatement21);
query1.Open;

end;
En son interboy tarafından 07 Ağu 2006 04:29 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Birden fazla yıla ait bilgi aynı yerde ise farklı yıllara ait bilgiler de gelir. Benim verdiğime ... and EXTRACT(YEAR FROM Tarih_Alani) = :YIL şeklinde yıl bilgiside eklenerek istenen sonuç alınabilir. Senin yazdığın şekilde de kullanılabilir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
Biltes
Üye
Mesajlar: 361
Kayıt: 11 Oca 2005 02:24
Konum: Edirne

Mesaj gönderen Biltes »

Mrhb;

Sonuçta ikisi de olabilir. Önemli olan istediğin veriyi komutla ekrana doğru bir şekilde getirebilmek.

Kolay gelsin...
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
Kullanıcı avatarı
interboy
Üye
Mesajlar: 84
Kayıt: 18 Mar 2005 02:52

Mesaj gönderen interboy »

teşekkür ederim hocam yıl bilgisinide kullanıcıdan alarak tekrar düzenledim.

yalnız hocam

Kod: Tümünü seç

EXTRACT(YEAR FROM Tarih_Alani) = :YIL 
bu şekilde hata weriyor. iki nokta yı kaldırınca kabul ediyor ancak.(=YIL)

selametle..
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Değişkenin önündeki iki nokta üst üste bunun dışarıdan gelen bir parametre olduğunu gösterir. Yani

Kod: Tümünü seç

select * from tablo
where extract(year from tarih_alani) = :YIL and extract(month from tarih_alani) = :AY
şeklinde olmalı :idea:
Verdiği hata metnini yazarsan neye itiraz ettiğini anlayabiliriz belki :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
interboy
Üye
Mesajlar: 84
Kayıt: 18 Mar 2005 02:52

benzer bi soru daha..

Mesaj gönderen interboy »

hocam yine buna benzer bi sorunla karşılaştm ve yeni konu açmaya gerek yok die burda yazıyorum:

yeni hedefim :D şu:

tüm satışların tutulduğu bir tablom wardı ya. işte o tablo yu grafiğe dökücem.aylara göre kaç satış olduğunu çizdiricem.

yani bana gereken tablo şöyle olcak:

Kod: Tümünü seç

01  |   02   |   03   |   04   | ... |  12   |  --> aylar
-------------------------------
1208| 1400   | 3000   |  1100  |  ... |  580  | --> satış adedi

şöyle bi sorgu kullanmaya yeltendim:

Kod: Tümünü seç

SELECT COUNT(*) AS ISLEM, EXTRACT(MONTH FROM G_TAR) AS AY 
FROM EYLUL 
WHERE EXTRACT(YEAR FROM G_TAR)='2006'
GROUP BY AY
fakat 'invalid field name: AY' hatası aldım.

AY alanı yerine tablodaki tarih alanımı kullanınca (group by g_tar) 'expressions in group by are not supported' gibi bi hata aldım.

nasıl bi sorgu kullanmalıyım?

tşk..
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

merhaba arkadasım
kolay gelsin.

benım amacım soruya cevap vermek değil. aten ustadlar yeteri kadar vermiş.benım soyleyeceğim şey ise şu paradoxtan en kısa zamanda kurtulmanı tavsiye ederim. daha sonra başın ağrımasın diye...
kolay gelsin
Kullanıcı avatarı
interboy
Üye
Mesajlar: 84
Kayıt: 18 Mar 2005 02:52

Mesaj gönderen interboy »

önerin için tşk ederim dostum. zaten küçük uygulamalarda paradox kullanıyorum sadece. firebird kullanıyorum diğerlerinde. ama firebird de yeniyim. geliştiriyorum bi yandan kendimi. bu uygulama bas,t bi rent a car uygulaması. cok fazla kayıt girilmeyecek. el alışkanlığıda olduu için paradox yapıwerdim.

tşk. ederim.

bide yukarıdaki sorum hakkında yardım ederseniz sewinirim.(iki cewap yukarda)

selametle..
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

interboy yazdı:teşekkür ederim hocam yıl bilgisinide kullanıcıdan alarak tekrar düzenledim.

yalnız hocam

Kod: Tümünü seç

EXTRACT(YEAR FROM Tarih_Alani) = :YIL 
bu şekilde hata weriyor. iki nokta yı kaldırınca kabul ediyor ancak.(=YIL)

selametle..

=: dan sonra parametre aktarman gerekli. yani

sql.add.('select **............. extrract .=:yıl'

yazdıktan sonra
query.parameterbyname('yıl').value:='12' gibi

herhalde ben sorunu anlamadım ?
Kullanıcı avatarı
interboy
Üye
Mesajlar: 84
Kayıt: 18 Mar 2005 02:52

Mesaj gönderen interboy »

sorum şu hocam:



hocam yine buna benzer bi sorunla karşılaştm ve yeni konu açmaya gerek yok die burda yazıyorum:

yeni hedefim şu:

tüm satışların tutulduğu bir tablom wardı ya. işte o tablo yu grafiğe dökücem.aylara göre kaç satış olduğunu çizdiricem.

yani bana gereken tablo şöyle olcak:

Kod:
01 | 02 | 03 | 04 | ... | 12 | --> aylar
-------------------------------
1208| 1400 | 3000 | 1100 | ... | 580 | --> satış adedi



şöyle bi sorgu kullanmaya yeltendim:

Kod:
SELECT COUNT(*) AS ISLEM, EXTRACT(MONTH FROM G_TAR) AS AY
FROM EYLUL
WHERE EXTRACT(YEAR FROM G_TAR)='2006'
GROUP BY AY


fakat 'invalid field name: AY' hatası aldım.

AY alanı yerine tablodaki tarih alanımı kullanınca (group by g_tar) 'expressions in group by are not supported' gibi bi hata aldım.

nasıl bi sorgu kullanmalıyım?

tşk..
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

arkadasım ilk olarak şunu belirteyim. burdaki ki cevapların doğruluğunu kimse garanti etmiyor. ikincisi bende yeniyim. ve ogrendiğim herşeyi paylaşmak için elimden geleni yapıyorum. daha once group bye terimini hiç kullanmadım. ama buna benzer olarak bi karşılaştığım sorunda extract (year ...)='2006' yazdığın noktayı ..=:yil olarak değiştirip program içerisinden bi parametre gondererek belki bir sonuca ulaşabilirsin. çünkü buna benzer bir sorunla karşılşmıştım. her şey mantıken uygun geliyordu.ben de problemi boyle çözmüştüm.
Kullanıcı avatarı
interboy
Üye
Mesajlar: 84
Kayıt: 18 Mar 2005 02:52

Mesaj gönderen interboy »

tşk ederim kardeş ama hatayı group by kısmında weriyo.

tşk..
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

group by değil de order bye olrak kullansan naıl ir sonuca ulaşırsın
Cevapla