Сложность фильтрации по столбцу выбора - PullRequest
0 голосов
/ 01 апреля 2020

Я собираюсь извиниться заранее. Я в основном спотыкаюсь о SQL, поскольку проекты должны быть выполнены, но мои знания скорее отсутствуют, поэтому я прошу прощения за любую неправильную терминологию или плохой синтаксис. Буду признателен, если кто-нибудь сможет мне помочь.

У меня есть следующий запрос.

WITH BusinessDayCalc
AS
(
    SELECT
            EstimatedClosingDate AS EstimatedClosingDate
              from SampleDB

)
SELECT
    a.*,
    (DATEDIFF(dd, GETDATE(), EstimatedClosingDate) + 1)
  -(DATEDIFF(wk,GETDATE(), EstimatedClosingDate) * 2)
  -(CASE WHEN DATENAME(dw, GETDATE()) = 'Sunday' THEN 1 ELSE 0 END)
  -(CASE WHEN DATENAME(dw, EstimatedClosingDate) = 'Saturday' THEN 1 ELSE 0 END)
  -(Select Count(*)  FROM Holiday Where Date >= GETDATE() AND Date < EstimatedClosingDate)

  AS BusinessDaysUntil
FROM BusinessDayCalc a
Where EstimatedClosingDate > GetDate() AND EstimatedClosingDate < (GetDate()+17)

Я также приложил фотографии текущего Вывод и праздничный стол , на который ссылаются.

Моя проблема в том, что я хотел бы иметь возможность фильтровать свои данные, чтобы показать любые данные, которые, однако, имеют 8 или 12 рабочих дней, Я не могу просмотреть имя столбца или SQL распознает столбец BusinessDaysUntil.

Может ли кто-нибудь мне помочь? Как только я получу это в квадрате, остальная часть проекта должна плавно работать.

1 Ответ

0 голосов
/ 01 апреля 2020

Нельзя использовать производный столбец в предложении WHERE. Также вы используете довольно бесполезный CTE, который возвращает только 1 столбец таблицы SampleDB. Вместо этого создайте CTE с запросом, а затем выберите из него и отфильтруйте:

WITH cte AS (
  SELECT
    EstimatedClosingDate,
    (DATEDIFF(dd, GETDATE(), EstimatedClosingDate) + 1)
    -(DATEDIFF(wk,GETDATE(), EstimatedClosingDate) * 2)
    -(CASE WHEN DATENAME(dw, GETDATE()) = 'Sunday' THEN 1 ELSE 0 END)
    -(CASE WHEN DATENAME(dw, EstimatedClosingDate) = 'Saturday' THEN 1 ELSE 0 END)
    -(CASE WHEN DATENAME(dw, EstimatedClosingDate) = 'Saturday' THEN 1 ELSE 0 END)
    -(Select Count(*)  FROM Holiday Where Date >= GETDATE() AND Date < EstimatedClosingDate) AS BusinessDaysUntil
  FROM SampleDB
  WHERE EstimatedClosingDate > GetDate() AND EstimatedClosingDate < (GetDate()+17)
)
SELECT * FROM cte
WHERE BusinessDaysUntil > ?

Замените BusinessDaysUntil > ? на фильтр, который вы хотите применить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...