Создать ПРЕДСТАВЛЕНИЕ с ПОМОЩЬЮ ИНСТРУКЦИИ IF (СЛУЧАЙ ДНЯ НЕДЕЛИ)

#sql #sql-server #tsql #sql-server-2008

#sql #sql-сервер #tsql #sql-сервер-2008

Вопрос:

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

Можно ли создать представление, подобное приведенному ниже?.

Например, если сегодня воскресенье, он возвращает строки из Tbl_FRUITS , а если понедельник, он возвращает строки из Tbl_VEGETABLE .

 CREATE VIEW TBL_CART
AS
IF (DATEPART(WEEKDAY,GETDATE()) = '1')
    SELECT * FROM Tbl_FRUITS
ELSE IF (DATEPART(WEEKDAY,GETDATE()) = '2')
    SELECT * FROM Tbl_VEGETABLE
 

Ответ №1:

Используйте union all с вашим условием в качестве соответствующего where предложения. Вам нужно будет убедиться, что вы возвращаете одни и те же столбцы из каждой отдельной таблицы, но в любом случае это нормально для представления. Повторяйте объединения столько дней, сколько у вас разных таблиц.

 SELECT *
FROM Tbl_FRUITS
WHERE DATEPART(WEEKDAY,GETDATE()) = 1
UNION ALL
SELECT *
FROM Tbl_VEGETABLE
WHERE DATEPART(WEEKDAY,GETDATE()) = 2;
 

Примечание: Как упоминал Гордон Линофф, вы не заключаете числа в кавычки (это делает их строками). И вы не сравниваете числа со строкой.

Комментарии:

1. Я взаимодействую с другой системой с помощью одного ПРЕДСТАВЛЕНИЯ. Если мне нужно возвращать разные данные за каждый день, должен ли я использовать объединение ВСЕ 7 раз?

2. Вы не должны сравнивать целое число со строковым значением.