for select

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

for select

Mesaj gönderen selm@n »

Selamun Aleykum ;

aşağıdaki gibi bir update'im var... bu update 'ti For SELECT ile ekrana döndürmesini istiyorum faka bir türlü yapamadım.. her seferinde end hatası veriyor...

UPDATE (Çalışıyor)

Kod: Tümünü seç

begin

update A set A.X =

 (select maas.BRUT_MAAS
  from MAAS
  where maas.P_SICIL = :psicil and maas.AY = :pay and maas.YIL= :pyil) -

  (((select CASE When sum(pr.P_ODEME) is null then 0 else sum(pr.P_ODEME) end
  FROM PRIM pr
  WHERE (pr.P_SICIL = :PSICIL and pr.P_AY = :pay and pr.P_YIL = :pyil)) +

   (select CASE When sum(sos.S_ODEME) is null then 0 else sum(sos.S_ODEME) end
   FROM SOSYAL sos
   WHERE (sos.S_SICIL = :PSICIL and sos.S_AY = :pay and sos.S_YIL = :pyil))) -

(select CASE WHEN sum(V.ODEME) is null then 0 else sum(V.ODEME) end
   FROM V_KESINTI_DETAY_V V
   WHERE (V.PSICIL_NO = :PSICIL and V.AY = :pay and V.YIL = :pyil)));
          
 end
yukarıdaki örneğin özeti

Kod: Tümünü seç

Net Maaş = BrutMaas - ( (PRIM + SOSYAL) - Kesinti) 
yapmak istediğim sicil,ay,yil vererek bana yukarıdaki select'i netmaas diye döndürmesini istiyorum...

yapamadığım SELECT'li SP'm;

Kod: Tümünü seç


select

(select maas.BRUT_MAAS
  from MAAS
where maas.P_SICIL = :psicil and maas.AY = :pay and maas.YIL = :pyil) -

(((select CASE When sum(pr.P_ODEME) is null then 0 else sum(pr.P_ODEME) end
   FROM PRIM pr
   WHERE (pr.P_SICIL = :PSICIL and pr.P_AY = :pay and pr.P_YIL = :pyil)) +

(select CASE When sum(sos.S_ODEME) is null then 0 else sum(sos.S_ODEME) end
    FROM SOSYAL sos
    WHERE (sos.S_SICIL = :PSICIL and sos.S_AY = :pay and sos.S_YIL = :pyil))) -

(select CASE WHEN sum(V.ODEME) is null then 0 else sum(V.ODEME) end
    FROM V_KESINTI_DETAY_V V
    WHERE (V.PSICIL_NO = :PSICIL and V.AY = :pay and V.YIL = :pyil)))

as netmaas
Teşekkürler..
;)
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

İlk baştaki select in from u nerde?
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

evet sorunda o ? içerdeki 4 adet select var ben bunu tek select gibi kullanmak istiyorum ama yazacağım select öyle olmalıki 4 select'ten dönen değeri benim as Netmaas alanıma dönsün...

fikrimce

Select (

(select BrutMaas) -

((select PRIM ) +

(select SOSYAL) -

(select Kesinti))

as Netmaas

böyle olması lazım gibi :(
birde daha önce fahrettin abinin yazmış olduğu bir kodu buldum (ama sysbase için galiba)

Kod: Tümünü seç

Select (Select Sum(ALAN1) from tablo1)-(Select Sum(ALAN2) from tablo2) as SONUC 
viewtopic.php?t=2735&highlight=biraz+sum

Teşekkür ederim..
;)
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Kod: Tümünü seç

select

(select maas.BRUT_MAAS
  from MAAS
where maas.P_SICIL = :psicil and maas.AY = :pay and maas.YIL = :pyil) -

(((select CASE When sum(pr.P_ODEME) is null then 0 else sum(pr.P_ODEME) end
   FROM PRIM pr
   WHERE (pr.P_SICIL = :PSICIL and pr.P_AY = :pay and pr.P_YIL = :pyil)) +

(select CASE When sum(sos.S_ODEME) is null then 0 else sum(sos.S_ODEME) end
    FROM SOSYAL sos
    WHERE (sos.S_SICIL = :PSICIL and sos.S_AY = :pay and sos.S_YIL = :pyil))) -

(select CASE WHEN sum(V.ODEME) is null then 0 else sum(V.ODEME) end
    FROM V_KESINTI_DETAY_V V
    WHERE (V.PSICIL_NO = :PSICIL and V.AY = :pay and V.YIL = :pyil)))

as netmaas 
FROM rdb$database
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

evet @naile hanım dediğiniz gibi bir tablo koydum ve çalıştı...
ama ben hala mantığını anlamadım :oops:
ama çalıştı :)


çalışan kod

Kod: Tümünü seç

select

(select maas.BRUT_MAAS
  from MAAS
  where maas.P_SICIL = 1 and maas.AY = '10' and maas.YIL = '2004') -

 (((select CASE When sum(pr.P_ODEME) is null then 0 else sum(pr.P_ODEME) end
                   FROM PRIM pr
                   WHERE (pr.P_SICIL = 1 and pr.P_AY = '10' and pr.P_YIL = '2004')) +

 (select CASE When sum(sos.S_ODEME) is null then 0 else sum(sos.S_ODEME) end
                   FROM SOSYAL sos
                   WHERE (sos.S_SICIL = 1 and sos.S_AY = '10' and sos.S_YIL = '2004'))) -

 (select CASE WHEN sum(V.ODEME) is null then 0 else sum(V.ODEME) end
                   FROM V_KESINTI_DETAY_V V
                   WHERE (V.PSICIL_NO = 1 and V.AY = '10' and V.YIL = '2004')))
 as NETMAAS       from MAAS_G
biraz daha araştırayım :wink:
teşekkürler...
;)
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

doğan hocam aynı anda yazmışız :)
peki hocam rdb$database neden ?
veya her hangi bir tablo yazsamda çalıştı burdaki mantık nedir :?:
çok teşekkürler...
;)
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

SELECT mutlaka bir FROM içermesi gerkecek şekilde tasarlanmıştır. Çoğu database de dummy bir tablo bu tip işlemlerde kullanılır. Oracle için DUAL adlı tabloda olduğu gibi. Firebird bu şekilde bir abstract tablo içermediğinden içinde az kayıt olan bir tablo kullanılır ve içinde herzaman tek kayıt olan rdb$database bu iş için idealdir.

Kolay gelsin.
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

teşekkürler hocam şimdik alnadım olayı...
;)
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Merhaba,

Bir not vermek istiyorum.
Sybase de FROM ile herhangi bir tablo adı belirtmek zorunda değilsiniz.

Örneğin ;

Kod: Tümünü seç

Select current_date
dediğinizde günün tarihini alabiliyorsunuz .
selm@n
Kıdemli Üye
Mesajlar: 442
Kayıt: 01 Oca 2004 11:52
Konum: Adapazarı
İletişim:

Mesaj gönderen selm@n »

bilgi için teşekkürler Oğuz hocam..
acaba default bir tablo adı mı atıyor Sybase :(
;)
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Selman kardeş o kadarını bilmiyorum ama bir çok Sybase fonksiyonunu bu şekilde kullanabilme imkanınız var.
Yine de dediğin gibi default bir tablodan alıyor olması gerek...

Kolay gelsin
Cevapla