Forum

Kod göre toplam
 
Bildirimler
Hepsini Temizle

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

32 Yazılar
5 Üyeler
0 Reactions
4,066 Görüntüleme
(@marufarslan)
Gönderiler: 167
Reputable Member
Konu başlatıcı
 
xxx

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

Mecutta bu şekild etabloyu oluşturdum. Sorguda DECLARE @KOD VARCHAR(15)='' kısmından itibaren çalıştırıyorum.

 

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 : 27/03/2019 13:59

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

Çalıştırdığım soru ;

DECLARE @KOD VARCHAR(15)=''
DECLARE @DEPO VARCHAR(15)=''
DECLARE @GUNCELBAKIYE DECIMAL(38,2)=0
DECLARE @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 TABLOMX AS T WITH(TABLOCK)
OPTION (MAXDOP 1);

SELECT * FROM TABLOMX

 

HATA ;

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 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 7
Must declare the scalar variable "@GUNCELBAKIYE".
Msg 319, Level 15, State 1, Line 12
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 : 27/03/2019 14:04

(@serkanates)
Gönderiler: 1322
Üye
 

Sadece tarih detayında tuttuğunuz tablonuzda stoklarınız gün içerisinde negatif değere ulaşabilir ve bunu farketmezsiniz. Örneğin sabahtan 10 olan değer öğlen -5 olup öğleden sonra 100 olabilir. Tarih bilginize detaylı saat bilgisi eklemeniz yerinde olacaktır.

İyi çalışmalar.

 
Gönderildi : 27/03/2019 14:20

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

Yürüyen bakiye bilgisi lazım bana, gün içerisinde ki - bakiye, gün sonunda + dönüyorsa sorun yok.

Günün sonunda - kapanan günü bulmak istiyorum.

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

 
Gönderildi : 27/03/2019 14:40

(@vedatozerr)
Gönderiler: 65
Trusted Member
 

Merhaba,

Mssql Server sürümünüz nedir ?

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

 
Gönderildi : 28/03/2019 09:27

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

Merhaba,

Mssql Server sürümünüz nedir ?

Merhaba,

SQL 2005

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

 
Gönderildi : 28/03/2019 09:31

(@vedatozerr)
Gönderiler: 65
Trusted Member
 

Merhaba,

Bilgi için teşekkürler. Mssql 2008 ve üstü versiyonlarda değişken verdikten sonra default değerini ='' verirken,  Mssql 2005 ve aşağısındaki sürümlerde aşağıdaki şeklinde Set atarak vermek gerekiyor.                                                                                                                                                                                                   

Sorguyu aşağıdaki şekilde değiştirip deneyin.

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

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

DECLARE @KOD VARCHAR(15)
SET @KOD = ''
DECLARE @DEPO VARCHAR(15)
SET @DEPO = ''
DECLARE @GUNCELBAKIYE DECIMAL(38,2)
SET @GUNCELBAKIYE=0
DECLARE @ONCEKIBAKIYE DECIMAL(38,2)
SET @ONCEKIBAKIYE=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,INDEX(COZUMPARK))
OPTION (MAXDOP 1);

SELECT * FROM #TABLOM
Bu ileti 6 yıl önce Vedat Özer tarafından düzenlendi

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

 
Gönderildi : 28/03/2019 09:37

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

Çok sağol, şimdi sorgu çalıştı.

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

 
Gönderildi : 28/03/2019 14:21

(@vedatozerr)
Gönderiler: 65
Trusted Member
 

Alternatif olarak Döngü ile çözümünü yapmıştım.

Biraz ağır çalışır bilginiz olsun.                                                                                                                 

 

SET NOCOUNT ON

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

CREATE TABLE #SONUC
(
TARIH DATETIME,
KOD VARCHAR(15),
MIKTAR DECIMAL(38,2),
DEPOKODU VARCHAR(15),
ONCEKIBAKIYE DECIMAL(38,2),
GUNCELBAKIYE DECIMAL(38,2)
)


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)
)
INSERT INTO #TABLOM (TARIH,KOD,MIKTAR,DEPOKODU)
SELECT '2019-12-10','A001',10,'100' UNION ALL
SELECT '2019-12-10','A001',-10,'100' UNION ALL
SELECT '2019-12-10','A001',10,'102' UNION ALL
SELECT '2019-12-10','B001',10,'100' UNION ALL
SELECT '2019-12-20','B001',-20,'100'

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

DECLARE @GUNCELBAKIYE DECIMAL(38,2)
SET @GUNCELBAKIYE=0
DECLARE @ONCEKIBAKIYE DECIMAL(38,2)

DECLARE @ALTBAKIYE DECIMAL(38,2)
SET @ONCEKIBAKIYE=0


DECLARE @KOD VARCHAR(15),@DEPO VARCHAR(15)
DECLARE STOKKART CURSOR FOR
SELECT KOD,DEPOKODU FROM #TABLOM
GROUP BY KOD,DEPOKODU

OPEN STOKKART
FETCH NEXT FROM STOKKART INTO @KOD,@DEPO
WHILE @@FETCH_STATUS=0
BEGIN

IF @@ERROR=0
BEGIN
SET @GUNCELBAKIYE=0
SET @ONCEKIBAKIYE=0
DECLARE @TARIH DATETIME,@MIKTAR DECIMAL(38,2)

DECLARE HAREKET CURSOR FOR
SELECT TARIH,MIKTAR FROM #TABLOM
WHERE KOD=@KOD AND DEPOKODU=@DEPO
ORDER BY TARIH ASC

OPEN HAREKET
FETCH NEXT FROM HAREKET INTO @TARIH,@MIKTAR

WHILE @@FETCH_STATUS=0 BEGIN
IF @@ERROR =0
BEGIN
SET @GUNCELBAKIYE = @GUNCELBAKIYE + @MIKTAR
SET @ONCEKIBAKIYE = @ONCEKIBAKIYE + @GUNCELBAKIYE-@MIKTAR

INSERT INTO #SONUC (TARIH,KOD,MIKTAR,DEPOKODU,ONCEKIBAKIYE,GUNCELBAKIYE)
VALUES (@TARIH,@KOD,@MIKTAR,@DEPO,@ONCEKIBAKIYE,@GUNCELBAKIYE)

END
FETCH NEXT FROM HAREKET INTO @TARIH,@MIKTAR
END

CLOSE HAREKET
DEALLOCATE HAREKET

END
FETCH NEXT FROM STOKKART INTO @KOD,@DEPO
END

CLOSE STOKKART
DEALLOCATE STOKKART


SELECT * FROM #SONUC


 

 

 

 

 

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

 
Gönderildi : 28/03/2019 14:40

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

Bu sorgunun digerinden farkı tam nedir?

Önceki sorgu baya işe yaradı,İstediğim alanları INTO ile yeni tabloya atadı, INDEX oluşturdum. hızlı bir şekilde işimi çözdü.

Allah razı olsun.

Sağol.

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

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

(@vedatozerr)
Gönderiler: 65
Trusted Member
 

Merhaba,

Cümlemizden.

İlk gönderdiğim sorgu yapı olarak hızlıdır. İkinci gönderdiğim sorguda Mssql döngü kurarak yazdım, bu yapı olarak ta biraz yavaştır. Örnek olması açısından ekledim.                                                                                                              

Kullanmış olduğunuz erp proğramı nedir ? 

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

 
Gönderildi : 28/03/2019 15:27

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

Dinamo ERP, programda bir sorun yok. Parametre de ki hatalı tanımdan bir dönem - stok oluştu.

Sağolun

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

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

(@vedatozerr)
Gönderiler: 65
Trusted Member
 

Anladım, Bende Logo Go-Plus                                                                                                                     

İyi çalışmalar dilerim.                                                                                                                             

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

 
Gönderildi : 28/03/2019 16:03

Sayfa 2 / 2
Paylaş: