SujataJK Ответов: 1

Как получить ожидающее, сертифицированное значение и оба значения из SQL server 2008


Привет,
здесь у меня есть демо-версия, в которой я должен рассчитать отложенную активность, сертифицированную активность и все(Pending+Certified).Проблема в том, что я использовал

NULL => для ожидающих
NOT NULL=> для сертифицированных и
""=> Для всех (ожидание + сертификация).

это значение исходит из кодирования c# в качестве параметра хранимой процедуры.

Что я уже пробовал:

Ниже приведена моя хранимая процедура


create  Procedure [dbo].[PROC_DPRREGISTER1_1] @PACKAGEDESCR VARCHAR(50),@VOUCHERFROMDT VARCHAR(20),@VOUCHERTODT VARCHAR(20),@STATUS VARCHAR(10),@RefNo varchar(10),@CONTRACTOR varchar(50)
AS
begin

--Declare @qry;
--set @qry=
select  * from DPRReg_R2 where PACKAGEDESCR=@PACKAGEDESCR  AND VOUCHERDT between @VOUCHERFROMDT AND @VOUCHERTODT
AND 
SUBACTIVITY = Case when len(@RefNo) >0 then @RefNo else SUBACTIVITY End 
And 
isnull(WDNO,'NULL') = case when @STATUS='NULL' THEN  'NULL'  
            WHEN @STATUS='NOT NULL' THEN  WDNO
            ELSE WDNO
       END
        AND Contractor=
        Case when  LEN(@CONTRACTOR)>0 then @CONTRACTOR else Contractor
        end 
end


1. этот запрос предназначен для нулевых значений, то есть для отложенных
EXEC [PROC_DPRREGISTER1_1] 'RML ACADEMY-LUCKNOW' ,'2017-04-01','2017-04-20','NULL','',''


2. This query is for NOT NULL VALUES i.e for CERTIFIED
<pre>EXEC [PROC_DPRREGISTER1_1] 'RML ACADEMY-LUCKNOW' ,'2017-04-01','2017-04-20','NOT NULL','',''


3. этот запрос предназначен для всех значений, то есть для сертифицированных + ожидающих
EXEC [PROC_DPRREGISTER1_1] 'RML ACADEMY-LUCKNOW' ,'2017-04-01','2017-04-20','','',''




Он отлично работает для ожидающих и сертифицированных, но что-то не так со всеми.то есть когда у меня есть ожидающие 20 записей и 115 сертифицированных 115 записей, то все должно быть 135, но мой запрос показывает 115 означает, что он снова показывает только сертифицированные записи
Пожалуйста, помогите мне..
спасибо.

1 Ответов

Рейтинг:
1

RickZeeland

Вы можете использовать отдельный запрос, например:

SELECT * from DPRReg_R2 WHERE @STATUS=''
В противном случае возникнет конфликт с NOT NULL, так как " тоже считается NOT NULL.


SujataJK

спасибо @RickZeeland, но @status= "here" он используется для pending + certified value.
то есть он должен отображать как ожидающие, так и сертифицированные значения.

SujataJK

Я не мог бы использовать отдельный запрос, как вы показали выше.Здесь у меня есть выпадающий список со значениями Pending, Certified, All .Где в моей таблице есть столбец WDNO с нулевым значением означает ожидание, а какое-то значение типа 'WDNLAK/00008/17-18' означает сертификацию .
Когда я выбираю опцию All из выпадающего списка, то результат содержит ожидающие записи + сертифицированные записи.Для этой цели у меня есть оператор use Case выше моего запроса.

RickZeeland

Может быть, проще создать отдельные хранимые процедуры для каждого случая, а затем использовать запросы.

RickZeeland

Для "всего" вам не нужен пункт "где", верно ?

SujataJK

да