Forum
Merhaba,
istanbul satışları ve izmir satışları tablolarında bulunan satırları toplayıp iki ildeki toplam satısı bulmak istiyorum ama çıktı olarak sadece iki ildede satılan ürünleri toplayıp veriyor. Yani ürün sadece istanbulda satıldıysa listede görünmüyor nerede hata yapıyorum?
SELECT dbo.STOK.STOKKODU, dbo.STOK.STOKADI, (SELECT ISNULL(dbo.ISTANBUL.Ocak + NULLIF (dbo.IZMIR.OCAK, 0), 0) AS OCAK) AS OCAK, (SELECT ISNULL(dbo.ISTANBUL.Subat + NULLIF (dbo.IZMIR.SUBAT, 0), 0) AS SUBAT) AS SUBAT, (SELECT ISNULL(dbo.ISTANBUL.Mart + NULLIF (dbo.IZMIR.MART, 0), 0) AS MART) AS MART, (SELECT ISNULL(dbo.ISTANBUL.Nisan + NULLIF (dbo.IZMIR.NISAN, 0), 0) AS NISAN) AS NISAN, (SELECT ISNULL(dbo.ISTANBUL.Mayis + NULLIF (dbo.IZMIR.MAYIS, 0), 0) AS MAYIS) AS MAYIS, (SELECT ISNULL(dbo.ISTANBUL.Haziran + NULLIF (dbo.IZMIR.HAZIRAN, 0), 0) AS HAZIRAN) AS HAZIRAN, (SELECT ISNULL(dbo.ISTANBUL.temmuz + NULLIF (dbo.IZMIR.TEMMUZ, 0), 0) AS TEMMUZ) AS TEMMUZ, (SELECT ISNULL(dbo.ISTANBUL.Agustos + NULLIF (dbo.IZMIR.AGUSTOS, 0), 0) AS AGUSTOS) AS AGUSTOS, (SELECT ISNULL(dbo.ISTANBUL.Eylul + NULLIF (dbo.IZMIR.EYLUL, 0), 0) AS EYLUL) AS EYLUL, (SELECT ISNULL(dbo.ISTANBUL.Ekim + NULLIF (dbo.IZMIR.EKIM, 0), 0) AS EKIM) AS EKIM, (SELECT ISNULL(dbo.ISTANBUL.Kasim + NULLIF (dbo.IZMIR.KASIM, 0), 0) AS KASIM) AS KASIM, (SELECT ISNULL(dbo.ISTANBUL.Aralik + NULLIF (dbo.IZMIR.ARALIK, 0), 0) AS ARALIK) AS ARALIK FROM dbo.STOK FULL OUTER JOIN dbo.ISTANBUL ON dbo.STOK.STOKKODU = dbo.ISTANBUL.STOKKODU FULL OUTER JOIN dbo.IZMIR ON dbo.STOK.STOKKODU = dbo.IZMIR.STOKKODU
Sorgunuz biraz karışık tam olarak ne yapmaya çalışıyor bu sorgu üzerine düşünmek lazım 🙂 Dolayısıyla nerede hata yapıyorsunuz bilemiyorum.
Üç adet tablonuz var. istanbul izmir ve stok. Neden stok ile full outer yapıyorsunuz anlayamadım. Sample data verirseniz üç tablo içinde size yardımcı olabiliriz.
Tüm ürünlerin stokta bir kaydı olduğunu varsayıyorum. Şuna benzer bir sorgunuz olmalı.
Select
SUM(IFNULL(I.Ocak,0)+IFNULL(I2.Ocak,0)) as Ocak
FROM Stok S
LEFT JOIN Istanbul I ON S.StockCode=I.StockCode
LEFT JOIN Izmir I2 ON S.StockCode=I2.StockCode
Sorgunuz biraz karışık tam olarak ne yapmaya çalışıyor bu sorgu üzerine düşünmek lazım 🙂 Dolayısıyla nerede hata yapıyorsunuz bilemiyorum.
Üç adet tablonuz var. istanbul izmir ve stok. Neden stok ile full outer yapıyorsunuz anlayamadım. Sample data verirseniz üç tablo içinde size yardımcı olabiliriz.
Tüm ürünlerin stokta bir kaydı olduğunu varsayıyorum. Şuna benzer bir sorgunuz olmalı.
Select
SUM(IFNULL(I.Ocak,0)+IFNULL(I2.Ocak,0)) as Ocak
FROM Stok S
LEFT JOIN Istanbul I ON S.StockCode=I.StockCode
LEFT JOIN Izmir I2 ON S.StockCode=I2.StockCode
Öncelikle cevabınız için teşekkür ederim. Sql konusunda uzman değilim. İnternetten bulduğum örnekleri birşeltirerek yapmaya çalıştım.
Stok tablosu ile yapma sebebim belki bütün stokaları getirirsem sadece eşleşenleri getirme çabasıyla tamamen 🙂
İstanbul tablosu Örnek:
Stok.Kodu Ocak Şubat Mart Nisan
Ürün 1 1 0 3 4
Ürün 2 3 4 0 0
Ürün 5 7 4 9 1
Ürün 7 1 9 0 3
izmir tablosu örnek:
Stok.Kodu Ocak Şubat Mart Nisan
Ürün 2 3 2 5 6
Ürün 8 7 2 5 5
Ürün 12 8 4 8 9
Ürün 15 5 8 2 4
Çıktı tablo
Stok.Kodu Ocak Şubat Mart Nisan
Ürün 2 6 6 5 6
Benim istediğim
Stok.Kodu Ocak Şubat Mart Nisan
Ürün 1 1 0 3 4
Ürün 2 6 6 5 6
Ürün 5 7 4 9 1
Ürün 7 1 9 0 3
Ürün 8 7 2 5 5
Ürün 12 8 4 8 9
Ürün 15 5 8 2 4
Paylaştığınız örnekte, iki tabloyu union all ile birleştirip tüm kayıtların olduğu bir tablo haline getirebilirsiniz. full outer join de kullanabilirsiniz. Ancak size aşağıdaki metot daha kolay gelecektir.
Tüm kayıtları x adında bir tabloda stok.kodu na göre gruplayıp eşleşenleri toplayıp size çıktısını verecektir.
select SUM(Ocak), SUM(Şubat), SUM(Mart), SUM(Nisan) FROM (
select * from Istanbul
UNION ALL
select * from Izmir
) x
group by Stok.Kodu
Kolaylıklar...
Yardımınız için çok teşekkür ederim sayenizde yapabildim.