[çözüldü] - çalıştıramadığım bir msssl sorgusu

Başlatan yakusha, 01 Temmuz 2011 - 12:01:01

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

yakusha

şirketimizin kullandığı program elvermediği yerlerde ufak tefek raporlama fonksiyonları yazmaya çalışıyorum...

bunlardan birisi olarak, ay bazında satışları görmek amacıyla şu sorguyu yazdım...

SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1 AND tarih > '2011-06-01 00:00:00.000'

sonuç olarak o ayki satış toplamını verdi...

her ay için ayrı ayrı satış ve iade sorgusu oluşturup sorgulamak yerine şöyle bir sql yazdım, ama çalışmıyor...

(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2011-07-01 00:00:00.000' ) as tay,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2011-06-01 00:00:00.000' AND tarih < '2011-07-01 00:00:00.000') as t30,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2011-05-02 00:00:00.000' AND tarih < '2011-06-01 00:00:00.000') as t60,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2011-04-02 00:00:00.000' AND tarih < '2011-05-02 00:00:00.000') as t90,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2011-03-02 00:00:00.000' AND tarih < '2011-04-02 00:00:00.000') as t120,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2011-01-31 00:00:00.000' AND tarih < '2011-03-02 00:00:00.000') as t150,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1 
AND tarih > '2011-01-01 00:00:00.000' AND tarih < '2011-01-31 00:00:00.000') as t180,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2010-12-02 00:00:00.000' AND tarih < '2011-01-01 00:00:00.000') as t210,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1 
AND tarih > '2010-11-02 00:00:00.000' AND tarih < '2010-12-02 00:00:00.000') as t240,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2010-10-04 00:00:00.000' AND tarih < '2010-11-02 00:00:00.000') as t270,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1 
AND tarih > '2010-09-04 00:00:00.000' AND tarih < '2010-10-04 00:00:00.000') as t300,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1 
AND tarih > '2010-08-05 00:00:00.000' AND tarih < '2010-09-04 00:00:00.000') as t330,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1
AND tarih > '2010-07-06 00:00:00.000' AND tarih < '2010-08-05 00:00:00.000') as t360,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2011-07-01 00:00:00.000' ) as itay,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2011-06-01 00:00:00.000' AND tarih < '2011-07-01 00:00:00.000') as it30,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2011-05-02 00:00:00.000' AND tarih < '2011-06-01 00:00:00.000') as it60,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2011-04-02 00:00:00.000' AND tarih < '2011-05-02 00:00:00.000') as it90,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2011-03-02 00:00:00.000' AND tarih < '2011-04-02 00:00:00.000') as it120,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2011-01-31 00:00:00.000' AND tarih < '2011-03-02 00:00:00.000') as it150,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4 
AND tarih > '2011-01-01 00:00:00.000' AND tarih < '2011-01-31 00:00:00.000') as it180,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2010-12-02 00:00:00.000' AND tarih < '2011-01-01 00:00:00.000') as it210,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4 
AND tarih > '2010-11-02 00:00:00.000' AND tarih < '2010-12-02 00:00:00.000') as it240,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2010-10-04 00:00:00.000' AND tarih < '2010-11-02 00:00:00.000') as it270,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4 
AND tarih > '2010-09-04 00:00:00.000' AND tarih < '2010-10-04 00:00:00.000') as it300,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4 
AND tarih > '2010-08-05 00:00:00.000' AND tarih < '2010-09-04 00:00:00.000') as it330,
(SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 4
AND tarih > '2010-07-06 00:00:00.000' AND tarih < '2010-08-05 00:00:00.000') as it360


aldığım hata:

Incorrect syntax near the keyword 'as'.

yardımınız için şimdiden teşekkürler.
Artık bu forumu kullanmıyor.

yakusha

ne kadar regular bilmem, fake bir ana sorgu altına diğer sorguları topladım, çalıştı

select username, (SELECT sum(borctl) FROM tumbelgeler WHERE belgekod = 1 AND tarih > '2011-07-01 00:00:00.000' ) as tay from user where userid = 0;
Artık bu forumu kullanmıyor.

sem

Tam olarak inceleyemedim fakat;

virgül ile ayırarak SQL sorgularını birleştirmek sözdizim (syntax) hatasına neden olacaktır.

Sanırım bütün select ler ile çektiğiniz sütun tür ve sayıları birbirine denk... Bu durumda virgül ile ayırdığınız SELECT sorgularını UNION ile ayırmayı deneyin...

Eğer gözümden kaçan bir şey yoksa sorunu çözecektir.

Yani ay kısmını parametre alan bir sorgu yazıp; bunu 12 kere yazıp union ile hepsini birbirine bağlarsanız sonra da ay yerlerine ocak, şubak.. istediğiniz şekilde doldurursanız olacaktır.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

yakusha

bu durumda en temel olarak union kullanımını öğrenmem gerek... :(

hemen araştırıyorum...
Artık bu forumu kullanmıyor.

sem

Kısa bir şey olduğu için ben sizin işinizi özellikle bu konuda kullanabileceğiz şekilde kolaylaştırayım yani araştırmadan zaman kazandırmak adına =);

UNION ile sorguları birbirine bağlıyoruz. Dikkat etmemiz gereken nokta birbirine bağlanacak sorguların sonuçlarının aynı tür ve sayıda kolon/sütun/alan döndürmesi....

Örneğin DENEME isimi bir tablomuz olsun, burada XXID değeri 10 dan büyük ve 5'ten küçük sonuçları alacağız diyelim... Tabii tek soru ile OR kullanarak da yapabiliriz fakat kolaylık açısından anlaşılır bir örnek diye bunu söylüyorum;


SELECT * FROM DENEME WHERE XXID < 5

Bu birinci sorgumuz... * dediğimiz için DENEME tablosunun tüm sütunları gelecek...

SELECT * FROM DENEME WHERE XXID > 10

Şimdi aynı şekilde * dediğimiz için DENEME tablosunun tüm sütunları gelecek. Yani iki sorgunun sonucunda da eşit sayıda ve türleri birbirleri ile aynı olan sütunlar dönecek... Bu durumda iki sonucu birbirine bağlamak için şu komutu veriyoruz


SELECT * FROM DENEME WHERE XXID < 5
UNION
SELECT * FROM DENEME WHERE XXID > 10

Böylece sorguların sonuçları birbirine bağlanmış oluyor...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?