CREATE FUNCTION [dbo].[INFO_F_IRS_ACKAL] ( @SofID int, @Plk Varchar(12), @Gun int, @Ay int, @Yil int, @GY int, @CY int)
RETURNS VARCHAR(400)
AS
BEGIN
DECLARE @OzlAck varchar(400)
SELECT @OzlAck=COALESCE(@OzlAck + ' ', '') + ISNULL(I.ACK,'') FROM INFO_IRSALIYE I WITH (NOLOCK)
LEFT JOIN INFO_BOLUM B1 ON B1.AKNO=I.DOLMYERI
LEFT JOIN INFO_BOLUM B2 ON B2.AKNO=I.SEVKYERI
WHERE I.ASOFOR=@SofID AND I.PLAKA=@Plk AND DAY(I.TARIH)=@Gun AND MONTH(I.TARIH)=@Ay AND YEAR(I.TARIH)=@Yil
RETURN ISNULL(@OzlAck,'')
END
yukarıdaki fonksiyona @GY veya @CY değer alabilir. sıfır da olabilir. eğer değer alırsa WHERE de işleme girmesi lazım (AND I.GYER=@GY) eğer değer yok ise WHERE koşulu etkilemesi lazım. Kafam durdu. 1 saattir uğraşıyorum olmadı. değer varsa nasıl eklerim? tşk.
ALTER FUNCTION [dbo].[INFO_F_IRS_NAKAL] ( @SofID int, @Plk Varchar(12), @Gun int, @Ay int, @Yil int, @CY int, @VY int)
RETURNS VARCHAR(400)
AS
BEGIN
DECLARE @OzlAck varchar(400)
if (@CY>0)
BEGIN
IF (@VY>0)
BEGIN
SELECT @OzlAck=COALESCE(@OzlAck + ',', '') + ISNULL(B1.KADI,'')+'_'+ISNULL(B2.KADI,'')+' '+CAST(COUNT(*) AS VARCHAR(2)) FROM INFO_IRSALIYE I WITH (NOLOCK)
LEFT JOIN INFO_BOLUM B1 ON B1.AKNO=I.DOLMYERI
LEFT JOIN INFO_BOLUM B2 ON B2.AKNO=I.SEVKYERI
WHERE I.ASOFOR=@SofID AND I.PLAKA=@Plk AND DAY(I.TARIH)=@Gun AND MONTH(I.TARIH)=@Ay AND YEAR(I.TARIH)=@Yil AND @CY=I.DOLMYERI AND @VY=I.SEVKYERI
GROUP BY B1.KADI, B2.KADI
ORDER BY B1.KADI, B2.KADI
END
ELSE
BEGIN
SELECT @OzlAck=COALESCE(@OzlAck + ',', '') + ISNULL(B1.KADI,'')+'_'+ISNULL(B2.KADI,'')+' '+CAST(COUNT(*) AS VARCHAR(2)) FROM INFO_IRSALIYE I WITH (NOLOCK)
LEFT JOIN INFO_BOLUM B1 ON B1.AKNO=I.DOLMYERI
LEFT JOIN INFO_BOLUM B2 ON B2.AKNO=I.SEVKYERI
WHERE I.ASOFOR=@SofID AND I.PLAKA=@Plk AND DAY(I.TARIH)=@Gun AND MONTH(I.TARIH)=@Ay AND YEAR(I.TARIH)=@Yil AND @CY=I.DOLMYERI
GROUP BY B1.KADI, B2.KADI
ORDER BY B1.KADI, B2.KADI
END
END
ELSE
BEGIN
if (@VY>0)
BEGIN
SELECT @OzlAck=COALESCE(@OzlAck + ',', '') + ISNULL(B1.KADI,'')+'_'+ISNULL(B2.KADI,'')+' '+CAST(COUNT(*) AS VARCHAR(2)) FROM INFO_IRSALIYE I WITH (NOLOCK)
LEFT JOIN INFO_BOLUM B1 ON B1.AKNO=I.DOLMYERI
LEFT JOIN INFO_BOLUM B2 ON B2.AKNO=I.SEVKYERI
WHERE I.ASOFOR=@SofID AND I.PLAKA=@Plk AND DAY(I.TARIH)=@Gun AND MONTH(I.TARIH)=@Ay AND YEAR(I.TARIH)=@Yil AND @VY=I.SEVKYERI
GROUP BY B1.KADI, B2.KADI
ORDER BY B1.KADI, B2.KADI
END
ELSE
BEGIN
SELECT @OzlAck=COALESCE(@OzlAck + ',', '') + ISNULL(B1.KADI,'')+'_'+ISNULL(B2.KADI,'')+' '+CAST(COUNT(*) AS VARCHAR(2)) FROM INFO_IRSALIYE I WITH (NOLOCK)
LEFT JOIN INFO_BOLUM B1 ON B1.AKNO=I.DOLMYERI
LEFT JOIN INFO_BOLUM B2 ON B2.AKNO=I.SEVKYERI
WHERE I.ASOFOR=@SofID AND I.PLAKA=@Plk AND DAY(I.TARIH)=@Gun AND MONTH(I.TARIH)=@Ay AND YEAR(I.TARIH)=@Yil
GROUP BY B1.KADI, B2.KADI
ORDER BY B1.KADI, B2.KADI
END
END
RETURN ISNULL(@OzlAck,'')
END
aklıma gelen 2 yöntem var...
1. sql i delphide oluşturur gibi varchar bir değişken üzerinden oluşturup parametreleri gelen değere göre sqle ekleyip kullanmak,
SELECT @OzlAck=COALESCE(@OzlAck + ',', '') + ISNULL(B1.KADI,'')+'_'+ISNULL(B2.KADI,'')+' '+CAST(COUNT(*) AS VARCHAR(2)) FROM INFO_IRSALIYE I WITH (NOLOCK)
LEFT JOIN INFO_BOLUM B1 ON B1.AKNO=I.DOLMYERI
LEFT JOIN INFO_BOLUM B2 ON B2.AKNO=I.SEVKYERI
WHERE I.ASOFOR=@SofID AND I.PLAKA=@Plk AND DAY(I.TARIH)=@Gun AND MONTH(I.TARIH)=@Ay AND YEAR(I.TARIH)=@Yil AND
--@CY 0 sa I.DOLMYERI ne kısıt vermemiş olursunuz, farklı bir değer varsa kısıtlanmış olur
((@CY=I.DOLMYERI) or (@CY=0)) AND
--@VY 0 sa I.SEVKYERI ne kısıt vermemiş olursunuz, farklı bir değer varsa kısıtlanmış olur
((@VY=I.SEVKYERI) or (@VY=0))
GROUP BY B1.KADI, B2.KADI
ORDER BY B1.KADI, B2.KADI
şaban beyin söylediklerine ek olarak
where cümleciğini şu şekilde yazarsan işini görür
where (:Param1 IS NULL OR LTRIM(RTRIM(:param1))='' OR param1=:param1) and (:Param2 IS NULL OR LTRIM(RTRIM(:param2))='' OR param2=:param2)and .....
burda delphi den gönderdiğin parametre NULL ise parantez içerisindeki diğer koşullara bakmadan ikinci paranteze geçer,eğer delphi den gönderdiğin değer NULL değilse
bu sefer de boş olma ihtimali var onu da kontrol ediyor,eğer delphi den gelen parametre boş ta değil ise o zaman tablodaki ilgili field ile eşleşiyor
bu işlemi istediğin kadar field' e uygulayabilirsin.
Kimseye hiçbir şey öğretemem, sadece onların düşünmelerini sağlayabilirim. SOKRATES