Forum

SQL kodlarıyla bölm...
 
Bildirimler
Hepsini Temizle

[Çözüldü] SQL kodlarıyla bölme işlemi sorunu

15 Yazılar
3 Üyeler
4 Likes
6,366 Görüntüleme
(@muhammedaktepe)
Gönderiler: 15
Eminent Member
Konu başlatıcı
 

Üstadlarım yapmış olduğum projemin belli bir bölümün SQL kodlarını sizlerle paylaşıyorum.

Yapmak istediğim şu;

Genel Toplam Sütununa gelen değeri Taksit Sayısına Bölüp farklı bir Sütunda Sonucu Göstertmek İstiyorum?

Alt kısımdaki Sorguyu Eklediğimde hata alıyorum.
Taksit Sayısı Kolonu nchar(2), Parasal Değer Taşıyan Kolonlar decimal(26, 2)

(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'G' THEN NETTUTAR ELSE 0 END) - (CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'C' THEN NETTUTAR ELSE 0 END) / dbo.TBL_KASA_HAREKET.TAKSITSAYISI AS VADETUTARI

Divide by zero error encountered.

SELECT
dbo.TBL_KASA_HAREKET.TAKSITSAYISI,
(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'G' THEN NETTUTAR ELSE 0 END) AS GIRIS,
(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'C' THEN NETTUTAR ELSE 0 END) AS CIKIS,
(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'G' THEN NETTUTAR ELSE 0 END) - (CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'C' THEN NETTUTAR ELSE 0 END) AS BAKIYE,
dbo.TBL_KASA_HAREKET.PESINAT,
(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'G' THEN NETTUTAR ELSE 0 END) - (CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'C' THEN NETTUTAR ELSE 0 END) - dbo.TBL_KASA_HAREKET.PESINAT AS GENELTOPLAM,
(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'G' THEN NETTUTAR ELSE 0 END) - (CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'C' THEN NETTUTAR ELSE 0 END) / dbo.TBL_KASA_HAREKET.TAKSITSAYISI AS VADETUTARI
FROM
dbo.TBL_KASA INNER JOIN
dbo.TBL_KASA_HAREKET ON dbo.TBL_KASA.KODU = dbo.TBL_KASA_HAREKET.KASAKODU
 
Gönderildi : 29/10/2019 22:58

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Aşağıdaki gibi deneyebilir misiniz.

 

ISNULL((CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'G' THEN NETTUTAR ELSE 0 END) - 
(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'C' THEN NETTUTAR ELSE 0 END) / NULLIF(
CAST(dbo.TBL_KASA_HAREKET.TAKSITSAYISI AS INT),0),0)
AS VADETUTARI

Örnekle ile ;

 

DECLARE @TAKSITSAYI NCHAR(2)='0',@TUTAR DECIMAL(26,2)='1500'

SELECT ISNULL(@TUTAR/NULLIF(CAST(@TAKSITSAYI AS INT),0),0) AS DOGRUSONUC
SELECT @TUTAR/CAST(@TAKSITSAYI AS INT) HATALISONUC
Bu ileti 4 yıl önce Vedat Özer tarafından düzenlendi

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

 
Gönderildi : 29/10/2019 23:26

(@muhammedaktepe)
Gönderiler: 15
Eminent Member
Konu başlatıcı
 
Gönderen: @vedatozerr

Merhaba,

Aşağıdaki gibi deneyebilir misiniz.

 

ISNULL((CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'G' THEN NETTUTAR ELSE 0 END) - 
(CASE WHEN dbo.TBL_KASA_HAREKET.GCKODU = 'C' THEN NETTUTAR ELSE 0 END) / NULLIF(
CAST(dbo.TBL_KASA_HAREKET.TAKSITSAYISI AS INT),0),0)
AS VADETUTARI

Örnekle ile ;

 

DECLARE @TAKSITSAYI NCHAR(2)='0',@TUTAR DECIMAL(26,2)='1500'

SELECT ISNULL(@TUTAR/NULLIF(CAST(@TAKSITSAYI AS INT),0),0) AS DOGRUSONUC
SELECT @TUTAR/CAST(@TAKSITSAYI AS INT) HATALISONUC

 

Öncelikle Teşekkür ederim. Kodu denedim. Sonuç değişmedi. Ekran görüntüsü linktedir.

 http://prntscr.com/pptzdl 


 
Gönderildi : 29/10/2019 23:34

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Kod bölme işlemi sırasında oluşan hatayı engelliyor , sonuçta taksit olunca bölme işlemi olacak değil mi ?

Taksit olmayan satırlarda bölme işlemi yok yada taksit yok ise 0 olacak , yada dilerseniz örnek verilerden oluşan temp tablo ekleyerek çözüme daha net gidebiliriz. 

 

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

 
Gönderildi : 29/10/2019 23:39

(@muhammedaktepe)
Gönderiler: 15
Eminent Member
Konu başlatıcı
 

Kasa Hareket Tablomun yapısı 

 http://prntscr.com/ppu35k 


 
Gönderildi : 29/10/2019 23:42

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Rapordan nasıl bir sonuç bekliyorsunuz, sonuç halini excel de veya resim olarak paylaşabilir misiniz. Bu tür konularda tablonun resmi yerine direk bu kısma yazarsanız tablonun içine veri ekleyip sonucunu test etmek daha kolay olur.

 

 

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

 
Gönderildi : 29/10/2019 23:48

(@muhammedaktepe)
Gönderiler: 15
Eminent Member
Konu başlatıcı
 

TBL_KASA_HAREKET Tablomun SQL Kod Yapısı

 

CREATE TABLE [dbo].[TBL_KASA_HAREKET](
[ID] [int] IDENTITY(1,1) NOT NULL,
[KASAKODU] [varchar](10) NULL,
[FISNO] [varchar](50) NULL,
[MAKBUZNO] [varchar](50) NULL,
[ISLEMTURU] [int] NULL,
[TARIH] [date] NULL,
[GCKODU] [varchar](2) NULL,
[TIPI] [varchar](20) NULL,
[NETTUTAR] [decimal](26, 2) NULL,
[PESINAT] [decimal](26, 2) NULL,
[GENELTUTAR] [decimal](26, 2) NULL,
[TAKSITVARMI] [bit] NULL,
[TAKSITSAYISI] [nchar](2) NULL,
[TAKSITODEME] [bit] NULL,
[CARIKODU] [varchar](50) NULL,
[BILGI] [varchar](max) NULL,
[TAKSITACIKLAMA] [varchar](50) NULL,
[FIRMAID] [int] NULL,
[SAVEUSER] [int] NULL,
[SAVEDATE] [datetime] NULL,
[EDITUSER] [int] NULL,
[EDITDATE] [datetime] NULL,
CONSTRAINT [PK_TBL_KASA_HAREKET_1] PRIMARY KEY CLUSTERED
([ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[TBL_KASA_HAREKET] ADD CONSTRAINT [DF_TBL_KASA_HAREKET_TAKSITVARMI] DEFAULT ('False') FOR [TAKSITVARMI]
GO
ALTER TABLE [dbo].[TBL_KASA_HAREKET] ADD CONSTRAINT [DF_TBL_KASA_HAREKET_TAKSITSAYISI] DEFAULT ((0)) FOR [TAKSITSAYISI]
GO
ALTER TABLE [dbo].[TBL_KASA_HAREKET] ADD CONSTRAINT [DF_TBL_KASA_HAREKET_TAKSITODEME] DEFAULT ('False') FOR [TAKSITODEME]
GO
ALTER TABLE [dbo].[TBL_KASA_HAREKET] ADD CONSTRAINT [DF_TBL_KASA_HAREKET_SAVEUSER] DEFAULT ((-1)) FOR [SAVEUSER]
GO
ALTER TABLE [dbo].[TBL_KASA_HAREKET] ADD CONSTRAINT [DF_TBL_KASA_HAREKET_SAVEDATE] DEFAULT (getdate()) FOR [SAVEDATE]
GO
ALTER TABLE [dbo].[TBL_KASA_HAREKET] ADD CONSTRAINT [DF_TBL_KASA_HAREKET_EDITUSER] DEFAULT ((-1)) FOR [EDITUSER]
GO
ALTER TABLE [dbo].[TBL_KASA_HAREKET] ADD CONSTRAINT [DF_TBL_KASA_HAREKET_EDITDATE] DEFAULT (getdate()) FOR [EDITDATE]
GO

 

 

 
Gönderildi : 29/10/2019 23:50

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Muhammed bey,

Sorgudan nasıl bir sonuç çıkmasını bekliyorsunuz onunda resmini paylaşabilir misiniz. İlk sorunuzda bölme işlemi sorunu ortadan kalktı , sanırım istediğiniz başka bir şey daha var yada kurgulamada başka ek parametrik değer var.

 

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

 
Gönderildi : 30/10/2019 08:58

(@muhammedaktepe)
Gönderiler: 15
Eminent Member
Konu başlatıcı
 

@vedatozerr

İlk sorun halen devam ediyor. Verdiğim Create table kodlarını SQL'e yükleyiniz. Sonrasında ilk verdiğim SQL kodlarını ilgili tablodan veri çekerek İşlem yaptırabilirsiniz.

 
Gönderildi : 30/10/2019 19:30

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba,

Ben geçiçi tablo oluşturdum



USE tempdb

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

CREATE TABLE #HAREKET
(
TAKSITSAYISI CHAR (2),
GIRIS DECIMAL(26,2),
CIKIS DECIMAL(26,2),
BAKIYE DECIMAL(26,2),
PESINAT DECIMAL(26,2),
GENELTOPLAM DECIMAL(26,2)
)
INSERT INTO #HAREKET
VALUES
('0',NULL,'0',NULL,NULL,NULL),
('0',NULL,'0',NULL,NULL,NULL),
('0','0',NULL,NULL,NULL,NULL),
('0',NULL,'0',NULL,NULL,NULL),
('0',NULL,'0',NULL,NULL,NULL),
('0','0',NULL,NULL,NULL,NULL),
('0','0',NULL,NULL,NULL,NULL),
('2','250','0',NULL,NULL,NULL),
('2','250','0',NULL,NULL,NULL)

SELECT *,ISNULL((ISNULL(GIRIS,0)-ISNULL(CIKIS,0))/NULLIF(CAST(TAKSITSAYISI AS INT),0),0) TUTAR
FROM #HAREKET

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

 
Gönderildi : 30/10/2019 23:04

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 32965
Illustrious Member Yönetici
 

Merhaba,

Konu biraz danışmanlığa dönmüş sanki?

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
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 : 03/11/2019 14:12

(@vedatozerr)
Gönderiler: 63
Trusted Member
 

Merhaba

Ben elimden geldiğince arkadaşın sorununa çözüm bulmaya çalıştım.

 

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

 
Gönderildi : 03/11/2019 15:54

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 32965
Illustrious Member Yönetici
 

Yok siz iyi niyetlisiniz ama soru soran kişide de aynı durum söz konusu olmalı. Danışmanlık ile çözülecek konular forum üzerinden çözülür ise forum amacına hizmet etmez. Bu durumda herkes her işini foruma sorar ve birilerinin onun için çalışmasını ister. Forumun mantığında siz yapabileceğiniz her şeyi yapıp takıldığınız "noktayı" sorarsınız komple projeyi değil.

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
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 : 03/11/2019 17:30

(@muhammedaktepe)
Gönderiler: 15
Eminent Member
Konu başlatıcı
 
Gönderen: @hakanuzuner

Yok siz iyi niyetlisiniz ama soru soran kişide de aynı durum söz konusu olmalı. Danışmanlık ile çözülecek konular forum üzerinden çözülür ise forum amacına hizmet etmez. Bu durumda herkes her işini foruma sorar ve birilerinin onun için çalışmasını ister. Forumun mantığında siz yapabileceğiniz her şeyi yapıp takıldığınız "noktayı" sorarsınız komple projeyi değil.

Konu içeriğini baştan okumanızı tavsiye ederim. Herşey en başta belirtilmiştir.

Neyse ki sorunu hallettim.

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

Hakan Uzuner
(@hakanuzuner)
Gönderiler: 32965
Illustrious Member Yönetici
 

Bende baştan okudum, soru süper başlamış, belirli bir bölümü olarak sonrası efsane. Eğer çözdü iseniz sorununuzun çözüldüğü bilgisini keşke paylaşa ve forumun üst bölümündeki "Çözüldü" şeklinde işaretleseydiniz keşke. Bu sayede başkaları da yararlanır.

Yok siz sorunu değerli forum üyemizin yardımları ile değil kendiniz çözdü iseniz yine nasıl çözdüğünüzü paylaşırsanız sektörde bundan yararlansın.

Teşekkürler.

Danışman - ITSTACK Bilgi Sistemleri
****************************************************************
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 : 03/11/2019 21:54

Paylaş: