Select içinde SP kullanımı

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
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Select içinde SP kullanımı

Mesaj gönderen SieS »

S.a..

Arkadaşlar ...
Makina ve Yıl bilgisini göndererek ay ay (ocak şubat mart ) üretimlerini döndüren bir SP var.
sadece 1 makina bilgisi geliyor normal olarak...
ben bunu bir select içinde kullanarak bütün makinalara ait bilgileri döndürmek istiyorum ama select içinde çeşitli hatalar aldım.

Aynen aşağıdaki gibi yazdım belliki yanlış yazmışım bunun bir kolay yolu varmıdır...

Kod: Tümünü seç

SELECT
   (SELECT OCAK,SUBAT,MART FROM aylik_toplam_makina_uretim :KOD,'2006'))
FROM
   URT_MAKINA


Teşekkürler
Ben Toprağın Sinesinde İnsan Denilen Bir Canım
Hem Düşünür, Hem Severim Budur Taştan Faklı Yanım.
Her maddenin zevlesini bedenimde taşıyorsam.
Ben ne bir taş ne bir ağaç, insanlığımla insanım.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

SP'yi de göndermen lazım gibi gözüküyor.

İyi çalışmalar.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Evet hem SP'yi gönderin hem de Sonuçta görmek istediğiniz Rapor (veya sonuç setini gösterin)

Yazdığınız SQL'de biraz tuhaf birşeyler var bunu ancak siz bilgi verirseniz söyleyebilir, yardımcı olabiliriz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Kod: Tümünü seç

CREATE PROCEDURE AYLIK_TOPLAM_MAKINA_URETIMI (
    makina varchar(30),
    yil varchar(10))
returns (
    makina_adi varchar(30),
    ocak double precision,
    subat double precision,
    mart double precision,
    nisan double precision,
    mayis double precision,
    haziran double precision,
    temmuz double precision,
    agustos double precision,
    eylul double precision,
    ekim double precision,
    kasim double precision,
    aralik double precision)
as
begin
FOR
select distinct A.MAKINAADI,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 1 ) AS OCAK,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 2 ) AS SUBAT,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 3 ) AS MART,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 4 ) AS NISAN,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 5 ) AS MAYIS,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 6 ) AS HAZIRAN,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 7 ) AS TEMMUZ,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 8 ) AS AGUSTOS,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 9 ) AS EYLUL,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 10 ) AS EKIM,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 11 ) AS KASIM,
    (SELECT sum (DEGER) FROM w_urt_raporlar WHERE makinaadi = A.makinaadi AND EXTRACT(month FROM TARIH) = 12 ) AS ARALIK
FROM
   w_urt_raporlar A
WHERE
    MAKINA = :MAKINA  AND ISLEM_KOD = 1 AND
    EXTRACT(YEAR FROM TARIH) = :YIL
order by  makina, MAKINA_NO
   into
    :makina_adi, :ocak, :subat, :mart, :nisan, :mayis, :haziran, :temmuz, :agustos, :eylul, :ekim, :kasim, :aralik

 DO
  suspend;
end
Procedure aynen yukardaki gibi burdan dönen değer

Kod: Tümünü seç

makina        0cak        şubat        mart .............
--------        ------        ------       -------
1.makina      2562        2565        2222 ...........

şeklinde 
parametre olarak 1.makina, 2006 gönderiyorum yukardaki değer geliyor
işletmede 10 adet makina var ben her makina için tek tek sorgu almak yerine makinalarınkayıtlı olduğu table kullanarak bir select cümlesi ile tamamını yukardaki gibi listelemek isytiyorum . Aşağıdaki örnek liste de olduğu gibi

Kod: Tümünü seç

makina        0cak       şubat       mart .............
--------        ------       ------      -------
1.makina     2562       2565        2222 ...........
2,makina       256          55        3565...........
4.makina     2333       4444        2222...........
5.makina       222         333          444...........
Aslında makinalarıda aynı procedure içerisinde listeletebilirdim fakat makinalar kendi içinde gruplara ayrılıyor o nedenle bu şekilde bir procedure daha çok işime geldi provedure nin çalışmasında problem yok
sorunsuz geliyor

Kod: Tümünü seç

  SELECT 
         (SELECT OCAK,SUBAT,MART FROM aylik_toplam_makina_uretim :KOD,'2006')) 
FROM 
   URT_MAKINA 
Yukardaki şekilde çalıştıramadım ne hikmetse ..
Teşekkür ederim.
Ben Toprağın Sinesinde İnsan Denilen Bir Canım
Hem Düşünür, Hem Severim Budur Taştan Faklı Yanım.
Her maddenin zevlesini bedenimde taşıyorsam.
Ben ne bir taş ne bir ağaç, insanlığımla insanım.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Şu ve benzeri query'lerle SP falan yazmanıza gerek kalmadan direk istediğiniz tabloları (sonuçları) elde edebilirsiniz:

Kod: Tümünü seç

SELECT
  T1.MAKINAADI,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 1 THEN T1.DEGER ELSE 0 END) AS OCAK,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 2 THEN T1.DEGER ELSE 0 END) AS SUBAT,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 3 THEN T1.DEGER ELSE 0 END) AS MART,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 4 THEN T1.DEGER ELSE 0 END) AS NISAN,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 5 THEN T1.DEGER ELSE 0 END) AS MAYIS,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 6 THEN T1.DEGER ELSE 0 END) AS HAZIRAN,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 7 THEN T1.DEGER ELSE 0 END) AS TEMMUZ,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 8 THEN T1.DEGER ELSE 0 END) AS AGUSTOS,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 9 THEN T1.DEGER ELSE 0 END) AS EYLUL,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 10 THEN T1.DEGER ELSE 0 END) AS EKIM,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 11 THEN T1.DEGER ELSE 0 END) AS KASIM,
  SUM(CASE WHEN EXTRACT(MONTH FROM T1.TARIH) = 12 THEN T1.DEGER ELSE 0 END) AS ARALIK
FROM w_urt_raporlar T1
GROUP BY T1.MAKINAADI
ORDER BY T1.MAKINAADI
İyi çalışmalar.
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Süper elinize beyninize sağlık, birkaç küçük ilaveyle tam istediğim gibi oldu.
Veritabanı şiştiğinde makinayı kasmaz isegerçekten harika.

Çok Teşekkür ederim.
Allah razı olsun.
Ben Toprağın Sinesinde İnsan Denilen Bir Canım
Hem Düşünür, Hem Severim Budur Taştan Faklı Yanım.
Her maddenin zevlesini bedenimde taşıyorsam.
Ben ne bir taş ne bir ağaç, insanlığımla insanım.
Cevapla