Cevaplar
-
Şunu deneyin:
SELECT * FROM RutbeJenerasyonIliskisi WHERE ID = ISNULL(@ID, ID) OR RutbeID = ISNULL(@RutbeID, RutbeID) OR Kademe = ISNULL(@Kademe, Kademe) OR KomisyonOrani = ISNULL(@KomisyonOrani, KomisyonOrani)
-
oguzmusa
Herkes farklı bir cevap veriyor. Uyguluyorum o anda doğru oluyor, çalışıyor oluyor, sonra gene bir yerde patlıyor. Yok mu bunun bir sabit olayı?11 yıl önce yazılmış -
mehmeta
İçerisine mantıklı kayıtlar atın ve tablonun kendisini gönderin. Almak istediğiniz sonucu da anlatırsanız farklı çözümler üretebiliriz, 'is null' kullanmak gerekmeyebilir.11 yıl önce yazılmış -
oguzmusa
ID RutbeID Kademe KomisyonOrani
8 2 1 10
9 3 1 15
10 4 1 20
Bu tablo üstündeki her alanı sorgulayabileceğim bir yapı.
yani ID değeri bu olan yada Rutbesi Bu olan yada Kademe değeri bu olan yada Komisyon değeri bul olan kayıtları getir.
Ama ben şunuda yapabilmeliyim.
Tüm değerleri girebileceğim gibi tek bir ID değeri yada ID ve Rütbe değeri girebilmeliyim...
bu durumda girmediğim diğer değerleri sorgu sırasında hesaba katmasın....
0 değer girersem doğal olarak 0 değeri hesaba katacak ve koşulsuz getirecek...
Açık olabildimmi?11 yıl önce yazılmış -
mehmeta
GÜnaydın,
Çok fazla OR hep kafamı karıştırmıştır :)
Test edebileceğiniz kodları da ekliyorum, şu an istediğinizi karşılıyor:DECLARE @table TABLE ( ID INT, RutbeID INT, Kademe INT, KomisyonOrani INT ) INSERT @table SELECT 8, 2, 1, 10 INSERT @table SELECT 9, 3, 1, 15 INSERT @table SELECT 10,4, 1, 20 DECLARE @ID INT DECLARE @RutbeID INT DECLARE @Kademe INT DECLARE @KomisyonOrani INT SET @ID = NULL SET @RutbeID = NULL SET @Kademe = 1 SET @KomisyonOrani = NULL SELECT * FROM @table WHERE ID = ISNULL(@ID, ID) AND RutbeID = ISNULL(@RutbeID, RutbeID) AND Kademe = ISNULL(@Kademe, Kademe) AND KomisyonOrani = ISNULL(@KomisyonOrani, KomisyonOrani)
11 yıl önce yazılmış -
oguzmusa
ALTER PROCEDURE [Anka].[SPRutbelerSelect]
@ID decimal(18,0) = NULL,
@RutbeKodu varchar(150)= NULL,
@RutbeAdi varchar(150)= NULL,
@Puan float= NULL,
@KisiSayisi decimal(10,0)= NULL,
@Director decimal(10,0)= NULL,
@UstRutbeSayisi decimal(10,0)= NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM Rutbeler
WHERE
(ID = ISNULL(@ID, ID)) OR
(RutbeKodu = ISNULL(@RutbeKodu, RutbeKodu)) OR
(RutbeAdi = ISNULL(@RutbeAdi, RutbeAdi)) OR
(Puan = ISNULL(@Puan, Puan)) OR
(KisiSayisi = ISNULL(@KisiSayisi, KisiSayisi)) OR
(Director = ISNULL(@Director, Director)) OR
(UstRutbeSayisi = ISNULL(@UstRutbeSayisi, UstRutbeSayisi))
END
Çalışmıyor dostum...
ID 5;
RutbeKodu 3E olan (iki farklı kayıt) kayıtları getir dediğimde getirmiyor...11 yıl önce yazılmış -
mehmeta
Hocam tekrar selam,
sizin tablo da, bizim fikirlerimiz gibi ilerledikce değişiyor :) Son gönderdiğinize göre son derece dinamik olacak şekilde bir örnek daha gönderiyorum. @SqlWhere değişkenine sadece hangi koşulları istiyorsanız onları örnekteki gibi yazınız.DECLARE @SqlWhere AS NVARCHAR(500) SET @SqlWhere = 'ID = 5 OR RutbeKodu = ''3E''' DECLARE @SQLQuery AS NVARCHAR(500) SET @SQLQuery = N' DECLARE @Rutbeler TABLE ( ID INT, RutbeKodu VARCHAR(2), Kademe INT, KomisyonOrani INT ) INSERT @Rutbeler SELECT 8, ''2'', 1, 10 INSERT @Rutbeler SELECT 9, ''3'', 1, 15 INSERT @Rutbeler SELECT 10, ''4'', 1, 20 INSERT @Rutbeler SELECT 5, ''4'', 1, 20 INSERT @Rutbeler SELECT 11, ''3E'', 1, 20 SELECT * FROM @Rutbeler WHERE 1 = 1 AND ' + @SqlWhere PRINT @SQLQuery EXECUTE(@SQLQuery)
Bu cevabın "doğru" olarak işaretleneceğini umuyorum :)11 yıl önce yazılmış
-