Sql syntax

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Sql syntax

Mesaj gönderen lazio »

merhaba,
sql serverda aşağıdaki sql cümlesi çalışıyor...

Kod: Tümünü seç

select O.mustkodu, (select SUM(tutar) from odeme where mustkodu = O.mustkodu) as TopTutar from Odeme O
goup by O.mustkodu
ancak aynı kodu Oracle da yazamıyorum,
sorun nedir acaba aynı mantıkla oracle da sql yazamazmıyız.
Resim

..::|YeşilMavi|::..
onaydin

Mesaj gönderen onaydin »

Aynı kodu kopyaladıysan group by ı yanlış yazmışşsın.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Aynı kodu kopyaladıysan group by ı yanlış yazmışşsın.
group by olduğu anlaşılıyorsa sorun yok :)
netice itibari ile bu tarz bişey olcak, yani kodu uzatmak mümkün.. :shock:
Resim

..::|YeşilMavi|::..
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Sayın LAZIO kardeş :D

alt select ifadesi ile ana select ifadesinde kullandığın tablolar aynı (Odeme) .

Bu yüzden aşağıda ki ifade istediğin sonucu vermez mi ?

Kod: Tümünü seç

select mustkodu, SUM(tutar) as TopTutar 
from Odeme 
group by mustkodu
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Bence verir.... :)
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

pek değerli Oğuz Abi,
çok haklısın,

Kod: Tümünü seç

select mustkodu, SUM(tutar) as TopTutar 
from Odeme 
bu kod bir gruba göre belli bir alanı/alanları toplar.
ancak benim yampak istediğim işte bu toplama işlemini bir şarta bağlamak.
yani,
Ödeme Tablosu şöyle olsun;

Kod: Tümünü seç

mustkodu | OdemeTipi | Tutar | OdemeTarihi vs..
ben burada tek satırda musteri bazında(group) ve Odeme Toplamını almak istiyorum..
İstediğim sonuç şu;

Kod: Tümünü seç

mustkodu | OdemeTipi | Tutar | OdemeTarihi vs..
1|N|100.00|01.01.2004
2|C|200.00|02.01.2004
gibi..
teşekkürler..
Resim

..::|YeşilMavi|::..
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Şöyle olabilir mi acaba :

Kod: Tümünü seç

select DISTINCT mustkodu, SUM(tutar) as TopTutar
from Odeme 
where Odeme_Tipi=:Odeme_Tipi
Group By mustkodu
:wink: :)

Kolay gelsin...
onaydin

Mesaj gönderen onaydin »

ben burada tek satırda musteri bazında(group) ve Odeme Toplamını almak istiyorum..
Hocam biraz açsan şu örneği, 4-5 satır veri girip şu sonucu görmek istiyorum desen, merak ettim şimdi.
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

@onaydın arkadaşımın merakını gidermek için yazıyorum, daha iyi bir yol buluncaya kadar view lerle hallettim. herkese teşekkürler..
aşağıdaki gibi bir tablom var,

Kod: Tümünü seç

id                  mkodu                odemetipi                   tutar
1                    1                         A                              100
2                     1                        B                              150
3                     1                        C                              200
4                      1                       A                              100
5                      1                       B                              100
6                      1                       C                              100
7                      2                         A                              100
8                       2                        B                              150
9                       2                        C                              200
10                      2                       A                              200
11                      2                       B                              200
12                      2                       C                              200


vs..
ben bunu aşağıdaki gibi göstermek istiyorum..

Kod: Tümünü seç

mkodu                Atipinden         Btipinden     CTipinden
1                          200                 250              300
2                          300                 350              400
işte yapmak istediğim bu
her müşterinin, her tip ödemesinin toplamları...
sql server ile bu tarz şeyleri ilk sorumdaki sql kodu ile yapabiliyorum ama oracle da syntax hatası verdi..
Resim

..::|YeşilMavi|::..
tears
Üye
Mesajlar: 79
Kayıt: 29 Kas 2004 12:32

Mesaj gönderen tears »

Kod: Tümünü seç

SELECT mkodu,
        (CASE WHEN odemetipi = A THEN SUM(tutar)END) AS Atipinden,
        (CASE WHEN odemetipi = B THEN SUM(tutar)END) AS Btipinden,
        (CASE WHEN odemetipi = C THEN SUM(tutar)END) AS Ctipinden
FROM odeme
GROUP BY mkodu
denersen sanırım olmalı...

kolay gelsin...
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Kod: Tümünü seç

ORA-00907 missing right parenthesis
Hatası veriyor..
Resim

..::|YeşilMavi|::..
tears
Üye
Mesajlar: 79
Kayıt: 29 Kas 2004 12:32

Mesaj gönderen tears »

Kod: Tümünü seç

SELECT 
mkodu, 
SUM(Atipinden) AS Atipinden, 
SUM(Btipinden) AS Btipinden, 
SUM(Ctipinden) AS Ctipinden 
FROM
	(
		SELECT 
				mkodu, 
		        (CASE WHEN odemetipi = 'A' THEN SUM(tutar)END) AS Atipinden, 
		        (CASE WHEN odemetipi = 'B' THEN SUM(tutar)END) AS Btipinden, 
		        (CASE WHEN odemetipi = 'C' THEN SUM(tutar)END) AS Ctipinden 
		FROM odeme 
		GROUP BY mkodu, odemetipi
	)TEMPTABLE
GROUP BY mkodu
bu bendeki çıktısı:

mkodu atipinden btipinden ctipinden
1 300.0000 400.0000 600.0000
2 200.0000 600.0000 900.0000



yukarıdaki oluşturmuş olduğun tabloya göre denersen olur galiba....

iyi çalışmalar....
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Kod: Tümünü seç

(CASE WHEN odemetipi = 'A' THEN SUM(tutar)END) AS Atipinden, 
            *
Error at line 6:
ORA-00907 : missing right parenthesis

hatasını alıyorum yine.
siz hangi veritabanında deniyorsunuz?
Resim

..::|YeşilMavi|::..
tears
Üye
Mesajlar: 79
Kayıt: 29 Kas 2004 12:32

Mesaj gönderen tears »

ben mssql server.

yukarısını iyi okumadığım için oldu galiba.

özür dilerim...
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

önemli değil, sql server da oluyorda oracle da olmuyor. :duvar: :kup:
yine uğraştığın için teşekkürler..
Resim

..::|YeşilMavi|::..
Cevapla