Member 13410460 Ответов: 2

Как установить paramenters в SQL с помощью if и else ?


Всем Привет,

У меня есть этот SQL-код, который я использую для своих диаграмм данных в Visual Studio (vb.net) и мне нужно установить значения для этого параметра с условием, но я не знаю, как это сделать:
ALTER Procedure Chart_daily1
(
 @DateD VARCHAR(50)
   ,@Department VARCHAR(50)
)
AS

 Begin

    SELECT    
          CONVERT(char(7), date, 120)  AS 'Month',
          DATEPART(DAY, Date) AS 'Day',
          SUM(Price) AS 'Total'
		  ,Department
FROM      [dbo].[Expenses]
where CONVERT(char(7), date, 120) = @DateD and Department =@Department
GROUP BY  DATEPART(DAY, Date),
         CONVERT(char(7), date, 120) ,
         -- DATEPART(YEAR, Date),
		  department
ORDER BY  
         Department,
          'Month',
          'Day'
   End


Это тот, который я использую для отдельного департамента значений данных диаграммы, у меня есть ComboBox в моей vb.net форма, которая устанавливается на конкретный отдел(@Департамента) и он показывает мне данные, и что я хочу сейчас, чтобы получить все отделы, когда я установить значение в моем поле со списком "все"

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

Я погуглил, могу ли я установить значение параметра в SQL, и я подумал, что если бы я мог сделать это так :

IF @Department ='All'
   set @Department IN ( 'Grocery','Electronics','Clothes','Vacation','Other','Fix Cost')

..а затем и весь остальной SQL-код.


Любая помощь будет оценена по достоинству.
Спасибо

2 Ответов

Рейтинг:
5

CHill60

Альтернативы решения 1-использовать чехол в предложении where можно не использовать, если например

SELECT
    CONVERT(char(7), [date], 120)  AS 'Month',
    DATEPART(DAY, [Date]) AS 'Day',
    SUM(Price) AS 'Total' ,Department
FROM Expenses
WHERE CONVERT(char(7), date, 120) = @DateD 
AND Department LIKE CASE WHEN @department = 'ALL' THEN '%' ELSE @department END
GROUP BY  DATEPART(DAY, [Date]), CONVERT(char(7), [Date], 120) ,department
ORDER BY  Department, 'Month','Day'


Member 13410460

Это тоже полезно, Спасибо товарищу за помощь.
с уважением

CHill60

С удовольствием

Рейтинг:
20

raddevus

ALTER Procedure Chart_daily1
(
 @DateD VARCHAR(50)
   ,@Department VARCHAR(50)
)
AS

Begin
    -- HERE IS NEW CODE
    IF @Department = 'ALL' -- check if @Deparment is sending in the ALL value
    BEGIN
    SELECT    
          CONVERT(char(7), date, 120)  AS 'Month',
          DATEPART(DAY, Date) AS 'Day',
          SUM(Price) AS 'Total' ,Department
          FROM      [dbo].[Expenses]
          where CONVERT(char(7), date, 120) = @DateD --removed department returns all
          GROUP BY  DATEPART(DAY, Date),
          CONVERT(char(7), date, 120) ,
         -- DATEPART(YEAR, Date),
		  department
          ORDER BY  
          Department,
          'Month',
          'Day'
    END
    ELSE -- HERE IS OLD CODE (DO ORIGINAL QUERY WITH @DEPARTMENT) 
          SELECT    
          CONVERT(char(7), date, 120)  AS 'Month',
          DATEPART(DAY, Date) AS 'Day',
          SUM(Price) AS 'Total'
		  ,Department
          FROM      [dbo].[Expenses]
          where CONVERT(char(7), date, 120) = @DateD and Department =@Department
          GROUP BY  DATEPART(DAY, Date),
         CONVERT(char(7), date, 120) ,
         -- DATEPART(YEAR, Date),
		  department
         ORDER BY  
         Department,
          'Month',
          'Day'
End


Member 13410460

спасибо тебе, приятель, это прекрасно сработало
с уважением