Forum

Her depodan miktarı...
 
Bildirimler
Hepsini Temizle

Her depodan miktarı en çok olan ürün bilgileri

9 Yazılar
3 Üyeler
0 Likes
1,927 Görüntüleme
(@ilkerARSLANTURK)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Arkadaşlar hayırlı akşamlar.

4 gündür bir sorgu üzerinde çalışıyorum ama zamanım kalmadığından çözemeyeceğim sanırım. 3 Tablo birbirine bağlı ve çıkan sonuçtan her depodan 

USE MASTER
GO
CREATE TABLE [dbo].[Stoklar](
[ID] [int] IDENTITY(1,1) NOT NULL,
[StokID] [int] NOT NULL,
[Kod] [nvarchar](20) NOT NULL,
[Adi] [nvarchar](100) NOT NULL
) ON [PRIMARY]
GO
INSERT INTO dbo.Stoklar(StokID,Kod,Adi)values(1,N'Kod-1',N'Ürün Adı 1')
INSERT INTO dbo.Stoklar(StokID,Kod,Adi)values(2,N'Kod-2',N'Ürün Adı 2')
INSERT INTO dbo.Stoklar(StokID,Kod,Adi)values(3,N'Kod-3',N'Ürün Adı 3')
INSERT INTO dbo.Stoklar(StokID,Kod,Adi)values(4,N'Kod-4',N'Ürün Adı 4')

 

CREATE TABLE [dbo].[AltStoklar](
[AltStokID] [int] IDENTITY(1,1) NOT NULL,
[StokID] [int] NOT NULL,
[DepoAdi] [nvarchar](20) NOT NULL,
[BirimAdi] [nvarchar](10) NOT NULL,
[Miktar] [float] NOT NULL,
) ON [PRIMARY]
GO
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(1,N'Kartal',N'Kilo',5)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(1,N'Kartal',N'Çuval',25)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(2,N'Pendik',N'Adet',1)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(2,N'Pendik',N'Paket',10)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(2,N'Pendik',N'Koli',4)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(3,N'Kadıköy',N'Adet',4)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(3,N'Kadıköy',N'Paket',4)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(3,N'Kadıköy',N'Koli',4)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(3,N'Kadıköy',N'Palet',4)
INSERT INTO dbo.AltStoklar(StokID,DepoAdi,BirimAdi,Miktar)values(4,N'Bostancı',N'Adet',4)

CREATE TABLE [dbo].[Fiyatlar](
[FiyatID] [int] IDENTITY(1,1) NOT NULL,
[AltStokID] [int] NOT NULL,
[Fiyat] [smallmoney] NOT NULL,
[ParaBirimi] [nvarchar](5) NOT NULL
) ON [PRIMARY]
GO
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(1,10,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(1,20,N'USD')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(1,60,N'EUR')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(2,40,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(2,24,N'USD')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(3,90,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(4,70,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(5,80,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(6,90,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(7,100,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(8,110,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(9,40,N'TL')
INSERT INTO dbo.Fiyatlar(AltStokID,Fiyat,ParaBirimi)values(10,70,N'TL')

select
TabloB.AltStokID,
TabloA.Kod,
TabloA.Adi,
TabloB.DepoAdi,
TabloB.BirimAdi,
TabloB.Miktar,
TabloC.Fiyat
from
dbo.Stoklar as TabloA
inner join dbo.AltStoklar as TabloB ON TabloB.StokID=TabloA.StokID
inner join dbo.Fiyatlar as TabloC ON TabloC.AltStokID=TabloB.AltStokID

ORDER BY
TabloB.Miktar desc
GO

DROP TABLE [dbo].[Stoklar]
GO
DROP TABLE [dbo].[AltStoklar]
GO
DROP TABLE [dbo].[Fiyatlar]
GO

 

Sorgu Ekranı

Mavi renkli satırlar sonuç olarak almalıyım. Nasıl bir yöntem izlemeliyim ?

Edit : Yalnız tablodaki kolon başlıklarım aynen olacak.

 
Gönderildi : 01/12/2016 23:34

(@ilkerARSLANTURK)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Değerli arkadaşlar henüz bir sonuç üretememiş bulunmaktayım.

Forumdaki Tüm benzer SQL konularını inceledim. Fakat çözüm çözüm çözüm yok.

Yardımlarınızı bekliyorum.

 
Gönderildi : 03/12/2016 07:07

(@ilkerARSLANTURK)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Merhaba Yavuz bey;

Evet birşeyler denemiştim ROW_NUMBER ile fakat istediğim sonucu alamamıştım. PARTITION, RANK, vb. şeyleri de inceledim olmadı. Çözüm Park Forum'da benzer makalelere rastladım ama Otomatik Sayı alanının içerisinden yukarıdaki caps şeklinde bir sonuç döndüremedim. Denemediğim şey kalmadı. Son çare olarak buraya yazdım. Arama motorlarının sonucuna da ulaşamadım.

Yukarıdaki tablom sadece bir örnek. joinle bağladığım yerler aslında int alan. Anlaşılsın diye öyle yazmıştım. Yaklaşık 30.000.000 satırlı bir join bu. 

Fonksiyonlar yazarak istediğim sonuçları alıyorum fakat performans ölüyor.

Bir taraftan denemelerim devam ediyor. Açıkcası ne yapacağımıda bilemiyorum. Gereksiz selectler yada joinler kullanmadan çözmeye çalışıyorum.

Küçük bir örnek sunmanız mümkünmüdür. En azından sizden esinlenerek geliştirebilirim diye düşünüyorum.

Cevabınız için teşekkürler.

 

 

 
Gönderildi : 03/12/2016 18:10

(@ilkerARSLANTURK)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Yavuz bey zaten proc içerisinde 2-3 parametre ile sorguluyorum. Where şartlarım var ve offset ile sayfalama yapıyorum. İlgili indexler de var. Bunlardada sorunum yok. Sorunum sadece SQL sorgusunda. İstemediğim satırlar gelmemesi lazım. 

Yani makalemi ilk açtığımda istediğim sonuç şu: Her depodan en çok olan ürün ve o ürüne ait fiyatın gelmesi. 

 

Stok Listesi

 

Yani mavi renkli satırların gelmesi lazım. Yukarda örnek verdiğim kodlar sadece anlaşılması açısındandı.

 
Gönderildi : 03/12/2016 21:47

(@YasinErgene)
Gönderiler: 15
Active Member
 

Merhaba,

select Max(Fiyat) from TABLO group by DepoAdi şeklinde mysql üzerinden benzer bir sonuç üretilebiliyor. Sql server üzerinde de deneyebilirsiniz.

 
Gönderildi : 04/12/2016 01:07

(@ilkerARSLANTURK)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Merhaba,

select Max(Fiyat) from TABLO group by DepoAdi şeklinde mysql üzerinden benzer bir sonuç üretilebiliyor. Sql server üzerinde de deneyebilirsiniz.

 

Sevgili Yasincim;

Yukarıdaki görüntüde benim esas istediğim aslında AltStokID 'dir. MAX ile olmaz istediğim. Dönen sonuç çoğalan bir otomatik sayı alanıdır. Daha önce karşıma hiç böyle bir durum çıkmadı. O yüzden çözümünde bayağı bir zorlanıyorum. 

Cevabın için teşekkür ederim.

Bu çözümü bulsam bulsam çözüm park'ta bulabilirim. Başka biryerde bulacağımı sanmıyorum. Bulursamda paylaşacağım. Bu konuda Sıkıntı çeken herkeze bir ışık olacaktır.

Saygı ve sevgilerimle

 
Gönderildi : 04/12/2016 20:38

(@ismailadar)
Gönderiler: 134
Estimable Member
 

Merhaba,

Her Depodaki en çok bulunan ürünlerin mi listelenmesini istiyorsunuz? 

 

Ayrıca aşağıdaki sorguyuda deneyebilirsiniz.

 

select * from (
select
TabloB.AltStokID,
TabloA.Kod,
TabloA.Adi,
TabloB.DepoAdi,
TabloB.BirimAdi,
TabloB.Miktar,
TabloC.Fiyat,
Row_number() over(partition by TabloB.DepoAdi order by TabloB.Miktar desc) as s
from
dbo.Stoklar as TabloA
inner join dbo.AltStoklar as TabloB ON TabloB.StokID=TabloA.StokID
inner join dbo.Fiyatlar as TabloC ON TabloC.AltStokID=TabloB.AltStokID
) k where s=1

 
Gönderildi : 05/12/2016 17:11

(@ilkerARSLANTURK)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Merhaba,

Her Depodaki en çok bulunan ürünlerin mi listelenmesini istiyorsunuz? 

 

Ayrıca aşağıdaki sorguyuda deneyebilirsiniz.

 

select * from (
select
TabloB.AltStokID,
TabloA.Kod,
TabloA.Adi,
TabloB.DepoAdi,
TabloB.BirimAdi,
TabloB.Miktar,
TabloC.Fiyat,
Row_number() over(partition by TabloB.DepoAdi order by TabloB.Miktar desc) as s
from
dbo.Stoklar as TabloA
inner join dbo.AltStoklar as TabloB ON TabloB.StokID=TabloA.StokID
inner join dbo.Fiyatlar as TabloC ON TabloC.AltStokID=TabloB.AltStokID
) k where s=1

İsmail bey harikasınız. Bu kodun aynısını ben denemiştim fakat partition by depo adından sonra birim adınıda ilave etmiştim. Hiç düşünememişimsadece DepoAdi kullanmayı.

Yapılabildiğini biliyorum ama artık bana imkansız gibi gelmeye başlamıştı. 

Çok sağolun. Allahta sizin sıkıntınızı gidersin İnşallah.

Saygı ve sevgilerimle

 
Gönderildi : 05/12/2016 18:37

(@ilkerARSLANTURK)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Merhaba,

Her Depodaki en çok bulunan ürünlerin mi listelenmesini istiyorsunuz? 

 

Ayrıca aşağıdaki sorguyuda deneyebilirsiniz.

 

select * from (
select
TabloB.AltStokID,
TabloA.Kod,
TabloA.Adi,
TabloB.DepoAdi,
TabloB.BirimAdi,
TabloB.Miktar,
TabloC.Fiyat,
Row_number() over(partition by TabloB.DepoAdi order by TabloB.Miktar desc) as s
from
dbo.Stoklar as TabloA
inner join dbo.AltStoklar as TabloB ON TabloB.StokID=TabloA.StokID
inner join dbo.Fiyatlar as TabloC ON TabloC.AltStokID=TabloB.AltStokID
) k where s=1

 

Ben 1 kere daha teşekkür etmek istiyorum 🙂

Çok sağolun.

 
Gönderildi : 05/12/2016 18:53

Paylaş: