sanal sütun da tip tanımlama

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
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

sanal sütun da tip tanımlama

Mesaj gönderen serbek_tr »

Hayırlı çalışmalar arkadaşlar. Yine yardım rica edeceğim aradım bulamadım yada ne şekilde aramam gerektiğini bilmiyorum başlıkta olduğu gibi yaptığım aramadan sonuç alamadım. aşağıdaki gibi bir kod satırım var burda tanımlanan sanal alanların tipini nasıl belirlerim
mesela bu şelide tarih bilgisini 1-NOV-2007 şeklinde alıyorum bunu 07.07.2007 şeklinde nasıl alırım.

not: bu alanları bu şekilde tanımladığım için muhtemelen text alan oluyorlar ve fields editörden display format ayarı yapılamıyor

Kod: Tümünü seç

SELECT
  '---' as Odemetarihi, //Bahsi geçen yer burası
  '---' AS ISLEMTIPI,
  '---' AS BELGENO,
  'D E V İ R' as GELIRADI,
  SUM(case when GELIRPROJE_HD.GPHD_ODEMETARIHI < '01.11.2007' then GELIRPROJE_HD.GPHD_ODENECEK else 0 end) AS Borc,
  (SELECT SUM(TAHSILAT.TUTAR) AS FIELD_1 FROM TAHSILAT WHERE (TAHSILAT.BORCLU = 0) AND (TAHSILAT.DAIRENO = 37) AND (TAHSILAT.TAHSILTARIHI < '01.11.2007')) AS Alacak

FROM
  GELIRPROJE_HD
WHERE
  (GELIRPROJE_HD.GPHD_BORCLU = 0) AND
  (GELIRPROJE_HD.GPHD_DAIRENO = 37)

UNION ALL

SELECT
  GELIRPROJE_HD.GPHD_ODEMETARIHI,
  'Aidat' AS ISLEMTIPI,
  '---' AS BELGENO,
  GELIRLER.GELIR_ADI,
  GELIRPROJE_HD.GPHD_ODENECEK AS BORC,
  ' - ' AS ALACAK
FROM
  GELIRPROJE_HD
  LEFT OUTER JOIN GELIRLER ON (GELIRPROJE_HD.GPHD_GELIRID = GELIRLER.GELIR_ID)
WHERE
  (GELIRPROJE_HD.GPHD_DAIRENO = 37) AND
  (GELIRPROJE_HD.GPHD_BORCLU = 0) AND
  (GELIRPROJE_HD.GPHD_ODEMETARIHI >= '01.11.2007') AND
  (GELIRPROJE_HD.GPHD_ODEMETARIHI <= '07.01.2008')

UNION ALL

SELECT
  TAHSILAT.TAHSILTARIHI,
  'Tahsil' AS ISLEMTIPI,
  TAHSILAT.ID AS BELGENO,
  TAHSILAT.ACIKLAMA,
  ' - ' AS BORC,
  TAHSILAT.TUTAR AS ALACAK
FROM
  TAHSILAT
WHERE
  (TAHSILAT.DAIRENO = 37) AND
  (TAHSILAT.BORCLU = 0) AND
  (TAHSILAT.TAHSILTARIHI >= '01.11.2007') and
  (TAHSILAT.TAHSILTARIHI <= '07.01.2008')
ORDER BY
  1
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

copy (tarih,1,2)

gibi aldığın parcaları concat ile birleştirebilirsiniz.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

ikutlay açıkçası nedemek istediğin anlamadım. bana birleştirme değil tanımladığım alanların tipini belirleme işlemi lazım, gerçi kodda bahsi geçen yer burası dedim ama sade orası için değil union birleştirmesi yaptığım için aslında birçok yerde tip belirtmem gerekli en azından nasıl yapıldığını öğrensem gerisin yaparım sanıyorum
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
tears
Üye
Mesajlar: 79
Kayıt: 29 Kas 2004 12:32

Mesaj gönderen tears »

mssql için case ya da convert kullanabilirsiniz
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

veri tabanı firebird zaten firebird başlığı altına yazdığım için belirtmeye gerek görmedim. ve ayrıca lütfen önerdiğiniz komutları nasıl kullanacağımıda belirtirseniz zaten kod satırını verdim

Kod: Tümünü seç

SELECT 
  '---' AS ODEMETARIHI ....... type, // gibi
yada nasıl oalcaksa
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

serbek_tr yazdı:ikutlay açıkçası nedemek istediğin anlamadım. bana birleştirme değil tanımladığım alanların tipini belirleme işlemi lazım, gerçi kodda bahsi geçen yer burası dedim ama sade orası için değil union birleştirmesi yaptığım için aslında birçok yerde tip belirtmem gerekli en azından nasıl yapıldığını öğrensem gerisin yaparım sanıyorum
sql için copy ve concat fonksiyonlarını incelermisin. benim dediğim olay manual ama her zaman geçerli akçe.

tarihi copy ile parcalara ayırıp concat ile kendine uygun şekilde tekrar oluşturacaksın
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

ikutluay arkadaşım ilgilendiğin çok sağol senin ne demek istediğini anladım ama sanırım senin dediğin yöntem benim işimi uzatacak çünkü bu vurda söz konusu olay sadece tarih olayı değil ayrıca parasal değerlerde olacak ve ben bunlar üzerinde hesap kitap yapacağım oncalcfields kısmında bunların çevrimi bana zaman kaybına sebep olacak o yüzden tiplerin tanımlamasını kod satırında yapmayı tercih ederim ama olmazsa tabiki senin dediğin gibi yapacağım fikrine sağlık. Ancak bu işin olduğunu biliyorum yani sanal sütun tanımlarken tip atama olayının olduğunu biliyorum çünkü mssql kullanan bir arkadaşım bu işi yapmıştı hatta ondanda yardım istedim ancak onun da gösterdiği yol herhalde mssqlde geçerli onun gösterdiği yolu denedim case ve convert ile başaramadım.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

ibm in sitesinde 16 mblık bir red book var. SQL kitabı. DB2 içindir ama çoğunlukla normal SQL dede işine yarar. birde ondan kontrol et istersen.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
peki stored procedure kullansan nasıl olur.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

v.a.s

sülünün bir lafı vardır;

"dadından yinmez"

ama tabi arkadaş ne der bilemiyorum
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

a.s. Sağol arkadaşlar desteginiz için beb ne diyebilirimki böyle güzel bir yardımlaşma ortamında herşey güzeldir dadından dolayı yenir zaten.
Ancak stored procedure ne amaçla kullanmam gerek davayı anlayamadım. Şimdi kısaca özet yaparsam görüldüğü üzere 3 tane tabloyu birleştiriyorum bu 3 tablo ile bir kişiye ait ekstre dökümü vereceğim her tabloda aynı alanlar mevcut olmadığı için daha doğrusu union all ile birleştirme yaptığımdan dolayı alanların eşit olması gerektiğinden sanal sütün tanımlamak zorundayım birde ilk select cümlesi bir devir hesaplama işi yapıyor dolayısı ile birleşme için diğer tablolarla sütün sayıları eşitlemek maksadıyla '---' AS .... ifadesi ile bunları gerçekleştiriyorum .Sonuç alıyorum problemde yok sadece aldığım sonuçları oncalcfields olayında çevirip zaman kaybetmemek adına '---' AS.. ile belirttiğim alanları belirtirken tip tanımı yapabilirmiyim onu öğrenmeye çalışıyorum. yoksa herbir alan için calcfields ekleyip olayında da gerekli çevirmeleri yapıyorum ama bir düşünün yılları içeren bir hareket olsa normalde 10 s de olacak bir işlemin belkide 10 dk çıkmasına neden oluyorum. yoksa çare tükenmez en kestirme ve hızlı yol aldığım sonuçları hesaplarken çevirmek. ama alan tipleri zaten isteiğim gibi tanımlayabilsem select ifadelerinde çevirmeye gerek kalmayacak.
Bu arada yordum sizi arkadaşlar hakkınızı helal edin.
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

SELECT işlemini şuna benzer yaptığında Delphi tarafında format belirleyebilirsin:

Kod: Tümünü seç

SELECT
  '1.1.2007' AS TARIH_1, //TStringField olarak döner
  CAST('1.1.2007' AS TIMESTAMP) AS TARIH_2, //TSQLTimeStampField olarak döner (dbExpress)
  URUN_KODU
FROM URUN
İyi çalışmalar.
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

İşte bu arkadaşım çok sağol

Kod: Tümünü seç

SELECT
  Cast('1.1.2001' As Date) Odemetarihi,
  '---' AS ISLEMTIPI,
  CAST('0' AS INTEGER) BELGENO,
  'D E V İ R' as GELIRADI,
mesele şu CAST te imiş işte bunu öğrendim artık bunda unutmam. bu sayede diğer tip tanımlarınıda CAST ile yapabilirim.
Hakan Can kardeşim aklına yüreğine sağlık. emeği geçen herkesin tabi sağolun arkadaşlar olay çözülmüştür
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Arkadaşlar bu arada daha ne komutlar vardır cast gibi bilmediğim firebird de kullanılar tüm komutların ve ne işe yaradığı gibi bir kaynak yer varmı yada bu forumda açıklama varmı(firebird komutları şeklinde aramada bilgi yok)
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla