Forum

Kod göre toplam
 
Bildirimler
Hepsini Temizle

[Çözüldü] Kod göre toplam

32 Yazılar
5 Üyeler
0 Likes
3,605 Görüntüleme
(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 

Merhaba arkadaşlar,

Bir tablom var Where koşulunda KOD ='ELMA' dediğimde sonuç kısmını nasıl elde ederim.

Teşekkürler.

Kod Çürük SAĞLAM
ELMA 1 10
ARMUT 2 50
     
Sonuç ELMA  
Çürük 1  
SAĞLAM 10  

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 11/03/2019 18:04

(@bugraparlayan)
Gönderiler: 324
Üye
 

Selamlar,

SELECT Kod , sum(CURUK) AS "CURUK", sum(SAGLAM) AS SAGLAM FROM Tablo_Adi Where Kod='ELMA'

 

Oracle ACE Associate - Türkiye Hayat & Emeklilik

****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 12/03/2019 08:13

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 

Merhaba Buğra bey, cevap için teşekkür.

Benim istediğim pivot tarzı sonuç elde etmekti.

Sonuç ELMA                                                                                                                          
Çürük 1  
SAĞLAM 10

 

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 12/03/2019 10:25

(@serkanates)
Gönderiler: 1275
Üye
 

Sql Server'da Pivot kullanabilirsiniz.

bknz : https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

İyi çalışmalar.

 

 
Gönderildi : 13/03/2019 00:01

(@yildirimbakar)
Gönderiler: 97
Estimable Member
 

Aşağıdaki şekilde dener misiniz?

select kod, sum(saglam) as elma from Tablo_Adı

where kod='elma'

group by kod

union all

select kod, sum(curuk) as elma from Tablo_Adı

where kod='elma'

group by kod

 
Gönderildi : 15/03/2019 17:15

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 

Mükerrer tolama yapıyor, fakat üzerinde çalışarak istediğim olacak.

Teşekkürler.

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 18/03/2019 09:41

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Selamlar,

Alternatif olarak aşağıdaki kodlar size fikir verecektir.

 

SET NOCOUNT ON
DECLARE @TABLO TABLE (Kod VARCHAR(15),Çürük float,Sağlam float)

INSERT INTO @TABLO (Kod,Çürük,Sağlam)
select 'ELMA','1','10' UNION ALL
SELECT 'ARMUT','2','50'

;WITH DATAM AS (select Kod,subject as Tipi,Toplam
from @TABLO unpivot (Toplam for subject in ([Çürük],Sağlam)) u)

SELECT *FROM (SELECT Kod,Tipi,
sum(Toplam) as ToplamTutar FROM DATAM
group by Kod,Tipi) as PTABLOM
PIVOT(SUM(ToplamTutar)FOR Kod IN (Elma,Armut))AS PIVOT_

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]

 
Gönderildi : 19/03/2019 23:30

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 

Merhaba, cevaplar için teşekkür.
Bu sorguyu yazılım içinde kullanacağım için  tablo başlıkları ile array oluşturdum,
for ile tek tek sql sorgusunda döndürdüm. Sütünlar satırlara döndü.

Örnek kod kesiti;

fire_tipi = Array("Çürük","SAGLAM")
for i = 0 to ubound(fire_tipi)
fire_tipi1 = fire_tipi(i)
sqlstr =" SELECT " & fire_tipi1 & " FROM DETAY where ARTIKEL = '" &trim(evrak_no)+"'"
set rs= db.execute(sqlstr)

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 22/03/2019 09:04

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 

Merhaba, cevaplar için teşekkür.
Bu sorguyu yazılım içinde kullanacağım için  tablo başlıkları ile array oluşturdum,
for ile tek tek sql sorgusunda döndürdüm. Sütünlar satırlara döndü.

Örnek kod kesiti;

fire_tipi = Array("Çürük","SAGLAM")
for i = 0 to ubound(fire_tipi)
fire_tipi1 = fire_tipi(i)
sqlstr =" SELECT " & fire_tipi1 & " FROM DETAY where ARTIKEL = '" &trim(evrak_no)+"'"
set rs= db.execute(sqlstr)

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 22/03/2019 09:05

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Sanırım siz direk DETAY tablosundan yürümüşsünüz haliyle satırlara döner.  Döngüye hiç girmeden direk , fire_tipi olan kısmı yukarıda paylaştığım sql sorgusunun içinde belirtirseniz istediğiniz olabilir.

@TABLO benim buradaki sanal tablom sizin DETAY tablosu sanırım ?

Bu arada yukarıdaki dil VBA değil mi eğer öyle ise örnek dosyayı yükleyin onun üzerinde yapalım.

 

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]

 
Gönderildi : 22/03/2019 09:15

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 

Merhaba, konuyu çözdüğümde sizin paylaşımı gördüm.

Şimdi gün içinde stok bakiyesini hesaplama çalışıyorum. Bir fikriniz varsa beklerim.

Tarih,Kod,Miktar,Depo Kodu şeklinde bir Stok Hareket tablom var.

Tarih Kod Miktar Depo  
1.012.019 A001 10 100  
1.012.019 A001 -10 100  
1.012.019 A001 10 102  Giriş
1.012.019 B001 10 100  
2.012.019 B001 -20 100

 Örnek - düşmüş

Önceki gün bakiyesi - bu günün bakiyesi

Ulaşmak istediğim her hangi bir yerde eksi düşüş oldu mu bulmak istiyorum.

Teşekkür ederim. Sağolun

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 22/03/2019 09:46

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Rica ederim,

Eğer ki Excel içinde böyle bir rapor oluşturuyorsanız hiç döngüye girmenize gerek yok parametrik değer göndererek yapabilir siniz. 

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]

 
Gönderildi : 22/03/2019 09:51

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Dediğinizi doğru anladım ise aşağıdaki sorguları deneyin. Eğer ki istediğiniz gibi değilse olması istediğiniz tablonun formatını paylaşın.

SET NOCOUNT ON

If(OBJECT_ID('tempdb..#TABLOM') Is Not Null)
Begin
Drop Table #TABLOM
End

CREATE TABLE #TABLOM
(
TARIH DATETIME,
KOD VARCHAR(15),
MIKTAR DECIMAL(38,2),
DEPOKODU VARCHAR(15),
ONCEKIBAKIYE DECIMAL(38,2),
GUNCELBAKIYE DECIMAL(38,2)
)
INSERT INTO #TABLOM (TARIH,KOD,MIKTAR,DEPOKODU,ONCEKIBAKIYE,GUNCELBAKIYE)
SELECT '2019-12-10','A001',10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',-10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',10,'102',0,0 UNION ALL
SELECT '2019-12-10','B001',10,'100',0,0 UNION ALL
SELECT '2019-12-20','B001',-20,'100' ,0,0

DECLARE @KOD VARCHAR(15)=''
DECLARE @DEPO VARCHAR(15)='',@GUNCELBAKIYE DECIMAL(38,2)=0,@ONCEKIBAKIYE DECIMAL(38,2)=0

UPDATE T
SET @GUNCELBAKIYE = GUNCELBAKIYE = MIKTAR + CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE ELSE 0 END,
@ONCEKIBAKIYE = ONCEKIBAKIYE = CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE-MIKTAR ELSE 0 END,

@KOD=KOD,
@DEPO=DEPOKODU
FROM #TABLOM AS T WITH(TABLOCK)
OPTION (MAXDOP 1);

SELECT * FROM #TABLOM

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]

 
Gönderildi : 22/03/2019 10:27

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 

Hızlı geri dönüş için Allah razı olsun,

1-2 saat sonra deneme fırsatım olacak.

Sagol.

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 22/03/2019 10:41

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Cümlemizden,

Yürüyen bakiye'de depo ile stok kodu baz aldım bilginiz olsun. Siz uygulayın bir hata veya sıkıntı olursa açıklamalı bir şekilde buraya yükleyin düzeltme yapalım.

 

                                                                                                                                                                         

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]

 
Gönderildi : 22/03/2019 10:46

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 
Vedat bey merhaba,
Benim sorgulayacağım tablo ismi STOKHAR, sorgu ile tmp tablosuna yazıp
o şekilde sonuç almak mı daha doğru olur.
Sizin sorguda #TABLOM isminde, bir tabloyu kendi içinde UPDATE etmiş siniz tehlikeli değilmi?
Bu sorguda KOD filitresi nasıl vere bilirim. Yaklaşık 2 milyon kaydı sorgualyacağım.
Sağol.


 

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 22/03/2019 15:58

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Ana tablonuz STOKHAR ise verileriniz toplu olarak geçiçi tabloya atıp sonrasında ındex tanımı ile hızlı bir şekilde rapor alabilirsiniz. Update biz gerçek tabloya değil, geçiçi tabloya yapıyoruz.           

SELECT *
INTO #TABLOM
FROM
STOKHAR

CREATE CLUSTERED INDEX VEDAT ON #TABLOM(KOD,DEPOKODU,TARIH)

 

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]

 
Gönderildi : 22/03/2019 16:08

(@marufarslan)
Gönderiler: 168
Reputable Member
Konu başlatıcı
 
Gönderen: Vedat Özer

Merhaba,

Dediğinizi doğru anladım ise aşağıdaki sorguları deneyin. Eğer ki istediğiniz gibi değilse olması istediğiniz tablonun formatını paylaşın.

SET NOCOUNT ON

If(OBJECT_ID('tempdb..#TABLOM') Is Not Null)
Begin
Drop Table #TABLOM
End

CREATE TABLE #TABLOM
(
TARIH DATETIME,
KOD VARCHAR(15),
MIKTAR DECIMAL(38,2),
DEPOKODU VARCHAR(15),
ONCEKIBAKIYE DECIMAL(38,2),
GUNCELBAKIYE DECIMAL(38,2)
)
INSERT INTO #TABLOM (TARIH,KOD,MIKTAR,DEPOKODU,ONCEKIBAKIYE,GUNCELBAKIYE)
SELECT '2019-12-10','A001',10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',-10,'100',0,0 UNION ALL
SELECT '2019-12-10','A001',10,'102',0,0 UNION ALL
SELECT '2019-12-10','B001',10,'100',0,0 UNION ALL
SELECT '2019-12-20','B001',-20,'100' ,0,0

DECLARE @KOD VARCHAR(15)=''
DECLARE @DEPO VARCHAR(15)='',@GUNCELBAKIYE DECIMAL(38,2)=0,@ONCEKIBAKIYE DECIMAL(38,2)=0

UPDATE T
SET @GUNCELBAKIYE = GUNCELBAKIYE = MIKTAR + CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE ELSE 0 END,
@ONCEKIBAKIYE = ONCEKIBAKIYE = CASE WHEN KOD=@KOD AND DEPOKODU=@DEPO THEN @GUNCELBAKIYE-MIKTAR ELSE 0 END,

@KOD=KOD,
@DEPO=DEPOKODU
FROM #TABLOM AS T WITH(TABLOCK)
OPTION (MAXDOP 1);

SELECT * FROM #TABLOM

Vedat bey sorgunu aşağıda ki hatayı vermekte,

Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 139, Level 15, State 1, Line 0
Cannot assign a default value to a local variable.
Msg 137, Level 15, State 1, Line 26
Must declare the scalar variable "@GUNCELBAKIYE".
Msg 319, Level 15, State 1, Line 31
Incorrect syntax near the keyword 'with'. If this statement is a common table expression or an xmlnamespaces clause, the previous statement must be terminated with a semicolon.

"Dalgasız denizde, herkes kaptandır."

 
Gönderildi : 25/03/2019 10:21

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Sorguyu kendimde tekrardan test ettim problem vermedi. Uygulama aşamasında bir yerler atlanmış olabilir.                                                                                                                                                                                                                                                                                                                            

örnek
Bu ileti 5 yıl önce Vedat Özer tarafından düzenlendi

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]

 
Gönderildi : 25/03/2019 10:29

Sayfa 1 / 2
Paylaş: