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...
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
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
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)
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)
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
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)
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...