Anasayfa » Forum

Kod göre toplam
 

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

Sayfa 1 / 2
  RSS
Murat Arslan
(@marufarslan)
Yeni Üye

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  
Alıntı
Gönderildi : 11/03/2019 18:04
Buğra PARLAYAN
(@bugraparlayan)
Yeni Üye Forum Yöneticisi

Selamlar,

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

 

CevapAlıntı
Gönderildi : 12/03/2019 08:13
Murat Arslan
(@marufarslan)
Yeni Üye

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

 

CevapAlıntı
Gönderildi : 12/03/2019 10:25
Serkan Ateş
(@SerkanAtes)
Ü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.

 

CevapAlıntı
Gönderildi : 13/03/2019 00:01
Yıldırım bakar
(@yildirimbakar)
Yeni Üye

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

CevapAlıntı
Gönderildi : 15/03/2019 17:15
Murat Arslan
(@marufarslan)
Yeni Üye

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

Teşekkürler.

CevapAlıntı
Gönderildi : 18/03/2019 09:41
Vedat Özer
(@vedatozerr)
Yeni Üye

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
vedatozer@outlook.com

CevapAlıntı
Gönderildi : 19/03/2019 23:30
Murat Arslan
(@marufarslan)
Yeni Üye

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)

CevapAlıntı
Gönderildi : 22/03/2019 09:04
Murat Arslan
(@marufarslan)
Yeni Üye

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)

CevapAlıntı
Gönderildi : 22/03/2019 09:05
Vedat Özer
(@vedatozerr)
Yeni Üye

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
vedatozer@outlook.com

CevapAlıntı
Gönderildi : 22/03/2019 09:15
Murat Arslan
(@marufarslan)
Yeni Üye

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

Bu ileti 2 ay önce Murat Arslan tarafından düzenlendi
CevapAlıntı
Gönderildi : 22/03/2019 09:46
Vedat Özer
(@vedatozerr)
Yeni Üye

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
vedatozer@outlook.com

CevapAlıntı
Gönderildi : 22/03/2019 09:51
Vedat Özer
(@vedatozerr)
Yeni Üye

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
vedatozer@outlook.com

CevapAlıntı
Gönderildi : 22/03/2019 10:27
Murat Arslan
(@marufarslan)
Yeni Üye

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

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

Sagol.

CevapAlıntı
Gönderildi : 22/03/2019 10:41
Vedat Özer
(@vedatozerr)
Yeni Üye

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
vedatozer@outlook.com

CevapAlıntı
Gönderildi : 22/03/2019 10:46
Murat Arslan
(@marufarslan)
Yeni Üye
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.


 

Bu ileti 2 ay önce Murat Arslan tarafından düzenlendi
CevapAlıntı
Gönderildi : 22/03/2019 15:58
Vedat Özer
(@vedatozerr)
Yeni Üye

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
vedatozer@outlook.com

CevapAlıntı
Gönderildi : 22/03/2019 16:08
Murat Arslan
(@marufarslan)
Yeni Üye
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.

CevapAlıntı
Gönderildi : 25/03/2019 10:21
Vedat Özer
(@vedatozerr)
Yeni Üye

Merhaba,

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

örnek

Bu ileti 2 ay önce Vedat Özer tarafından düzenlendi

حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
vedatozer@outlook.com

CevapAlıntı
Gönderildi : 25/03/2019 10:29
Sayfa 1 / 2
Paylaş:
  
Çalışıyor

Lütfen Giriş yap yada Kayıt ol