SQL SUM

Başlatan influx, 04 Ağustos 2013, 14:41:51

influx

Arkadaşlar aşagıdaki gibi bir tablom var ve 'ID' grup yaparak bir alttaki tabloyu elde etmek istiyorum

TABLO_1
ID   DEGER   POZ
1   100           Y
2   70           X
1   30           X
1   20           X
3   50           X
4   40           X
4   20           Y

Elde etmek istediğim tablo;

ID   X   Y
1   50   100
2   70   0
3   50   0
4   40   20

yani "select ID,sum(DEGER) as X from TABLO_1 where POZ='X' group by ID"
ve    "select ID,sum(DEGER) as Y from TABLO_1 where POZ='Y' group by ID" iki sql sorgusunu bir arada yazamıyorum, yazılımcı arkaaşlar bunu nasıl
çözerim? iç içe select ler yazarak yapmaya çalıştım ama olmadı...


Yuunus

join'e bir göz at istersen.

influx

#2
JOIN ile olacağını sanmıyorum...

Oluyormuş meğersem, joın+subq.  :)

evreno

#3
SELECT ID,CASE WHEN POZ = 'X' THEN SUM(DEGER) ELSE 0 END AS X,CASE WHEN POZ = 'Y' THEN SUM(DEGER) ELSE 0 END AS Y FROM TABLO_1 GROUP BY ID

Bu sorgu işini görür

Yada böyle olmalı test edersin

SELECT ID,SUM(CASE WHEN POZ = 'X' THEN DEGER ELSE 0 END) AS X,SUM(CASE WHEN POZ = 'Y' THEN DEGER ELSE 0 END) AS Y FROM TABLO_1 GROUP BY ID

influx

#4
Hata = 'WHEN' Tanınmayan anahtar sözcüğü. (vb kullanıyorum)
Sub Query ile nasıl yazılır?

evreno

Sol in sürümü nedir
Ms sql 2000 ve sonrasında sorun olmaması lazım

influx

Alıntı yapılan: evreno - 04 Ağustos 2013, 18:02:24
Sol in sürümü nedir
Ms sql 2000 ve sonrasında sorun olmaması lazım
Access veri tabanı kullanıyorum; dataları visual basic içinde sql ile çekiyorum.

cicjoe

BEGIN TRANSACTION;

DROP TABLE TABLO_1;
CREATE TABLE TABLO_1(Id integer, DEGER integer, POZ text);

INSERT INTO TABLO_1 VALUES(1,100,'Y');
INSERT INTO TABLO_1 VALUES(2,70,'X');
INSERT INTO TABLO_1 VALUES(1,30,'X');
INSERT INTO TABLO_1 VALUES(1,20,'X');
INSERT INTO TABLO_1 VALUES(2,20,'Y');

COMMIT;

SELECT T1.ID, T1.X, T2.Y FROM
    (SELECT ID, SUM(DEGER) AS X, POZ FROM TABLO_1 WHERE POZ='X' GROUP BY POZ, ID) AS T1 JOIN
    (SELECT ID, SUM(DEGER) AS Y, POZ FROM TABLO_1 WHERE POZ='Y' GROUP BY POZ, ID) AS T2 ON
    T1.ID = T2.ID;


Bu sekilde denedim..

Sonuc:
1|50|100
2|70|20

influx

Alıntı yapılan: cicjoe - 04 Ağustos 2013, 19:37:28
BEGIN TRANSACTION;

DROP TABLE TABLO_1;
CREATE TABLE TABLO_1(Id integer, DEGER integer, POZ text);

INSERT INTO TABLO_1 VALUES(1,100,'Y');
INSERT INTO TABLO_1 VALUES(2,70,'X');
INSERT INTO TABLO_1 VALUES(1,30,'X');
INSERT INTO TABLO_1 VALUES(1,20,'X');
INSERT INTO TABLO_1 VALUES(2,20,'Y');

COMMIT;

SELECT T1.ID, T1.X, T2.Y FROM
    (SELECT ID, SUM(DEGER) AS X, POZ FROM TABLO_1 WHERE POZ='X' GROUP BY POZ, ID) AS T1 JOIN
    (SELECT ID, SUM(DEGER) AS Y, POZ FROM TABLO_1 WHERE POZ='Y' GROUP BY POZ, ID) AS T2 ON
    T1.ID = T2.ID;


Bu sekilde denedim..

Sonuc:
1|50|100
2|70|20

Teşekkürler :)

muhittin_kaplan

bunu böyle yapacağına access te "sorgu" (wiev) ile yapıp normal yoldan vb ye atsan olmaz mı ?

influx

Olur heralde hocam , anlatın onuda öğrenelim, access arayüzünü kullanmadığım için nasıl yapılacağını bilmiyorum.

muhittin_kaplan

access de tablolar, sorgular, raporlar vs vardır
sorguları tıklarsan sihirbaz sana yardım eder. (bece karıştır biraz.)
Access 2010 Sorgu Oluşturma

evreno

Access de olabiliyormuş

http://msdn.microsoft.com/tr-tr/library/ms181765.aspx

Burayı incelemende fayda var