Forum
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."
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.
*****************************************************************
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."
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.
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
Mükerrer tolama yapıyor, fakat üzerinde çalışarak istediğim olacak.
Teşekkürler.
"Dalgasız denizde, herkes kaptandır."
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]
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."
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."
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]
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."
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]
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]
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."
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]
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."
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]
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."
Merhaba,
Sorguyu kendimde tekrardan test ettim problem vermedi. Uygulama aşamasında bir yerler atlanmış olabilir.
حَسْبُنَا اللهُ وَنِعْمَ الْوَكِيلُ
Allah bize yeter, O ne güzel vekildir.
Antalya
[email protected]