2013-09-04 2 views
1

enter image description here Моя хранимая процедура, как это:подсчет нескольких столбцов в хранимой процедуре

ALTER procedure [dbo].[Driverperformance] 
@Ecode nvarchar(50), 
@startdate datetime, 
@enddate datetime 
as begin 

SELECT e.Ecode, CAST(q.dtime AS DATE) as Date , e.Ename, count(q.Ecode) CntEcode 
FROM EmployeeMaster_tbl e 
JOIN Transaction_tbl q 
ON e.Ecode = q.Ecode  

where [email protected] and dtime >= '' + @startdate +'' and dtime <= ''[email protected] +'' 

group by e.Ecode, e.Ename, CAST(q.dtime AS date) 

ORDER BY CAST(q.dtime AS date)--e.Ecode DESC 

end 

это работает fine.in это я получаю отсчет [(q.Ecode)] является perferct.i есть еще один поле в имени транзакции (DelEcode). i хотите считать количество (DelEcode) таким же способом.sam способ означает, что я беру счет Ecode, как будто мне нужно подсчитать DelEcode aslos.so какие изменения я должен сделать в моей текущей хранимой процедуре. В то время как я выхожу так: но я хочу получить еще один столбец cntDelcode в том, что я хочу показать кол-во DelEcode

+0

Хотите добавить оба результата вместе, или возвращает результат, который имеет оба значения? – christiandev

+0

Я хочу вернуть результат, который имеет оба значения – user2674855

ответ

0

Что-то ли ке это дает пользователю возможность выбора, следует ли запрашивать ECODE или DELECODE:

ALTER procedure [dbo].[Driverperformance] 
@code nvarchar(50), 
@startdate datetime, 
@enddate datetime, 
@test VARCHAR(1) 
as 

IF @test = 1 BEGIN 
    SELECT e.Ecode, CAST(q.dtime AS DATE) as Date , e.Ename, count(q.Ecode) CntEcode 
    FROM EmployeeMaster_tbl e 
    JOIN Transaction_tbl q 
    ON e.Ecode = q.Ecode  
    where [email protected] and dtime >= '' + @startdate +'' and dtime <= ''[email protected] +'' 
    group by e.Ecode, e.Ename, CAST(q.dtime AS date) 
    ORDER BY CAST(q.dtime AS date)--e.Ecode DESC 
    END 
ELSE 
    BEGIN 

    SELECT e.delEcode, CAST(q.dtime AS DATE) as Date , e.Ename, count(q.delEcode) Cntcode 
    FROM EmployeeMaster_tbl e 
    JOIN Transaction_tbl q 
    ON e.delEcode = q.delEcode  
    where [email protected] and dtime >= '' + @startdate +'' and dtime <= ''[email protected] +'' 
    group by e.delEcode, e.Ename, CAST(q.dtime AS date) 
    ORDER BY CAST(q.dtime AS date)--e.Ecode DESC 
    END 
END 

Это проверялось, но вы можете видеть, куда я иду. Дополнительный ввод позволяет пользователю выбрать, какое поле будет проверяться.

+0

Неверный синтаксис рядом с ключевым словом «ELSE». – user2674855

+0

Он нужен и КОНЕЦ до ELSE. Как я уже сказал, вам может понадобиться немного подкорректировать его, но вы должны уметь его оттуда. – Yonabart

+0

ОК, теперь выполнено ,, но сэр я хочу получить оба счета одновременно, – user2674855

0

Вы также можете запустить следующий код:

ALTER procedure [dbo].[Driverperformance] 
@Ecode nvarchar(50), 
@startdate datetime, 
@enddate datetime, 
@test bit=0 
as begin 

SELECT e.Ecode, CAST(q.dtime AS DATE) as Date , e.Ename, case when @test=1 then count(q.Ecode) else count(q.delCode) end as CntEcode 
FROM EmployeeMaster_tbl e 
JOIN Transaction_tbl q 
ON e.Ecode = q.Ecode  

where [email protected] and dtime >= '' + @startdate +'' and dtime <= ''[email protected] +'' 

group by e.Ecode, e.Ename, CAST(q.dtime AS date) 

ORDER BY CAST(q.dtime AS date)--e.Ecode DESC 

end 
+0

сэр, я хочу получить оба счета одновременно – user2674855

Смежные вопросы