Подзапросы в выписке - PullRequest
       18

Подзапросы в выписке

0 голосов
/ 16 ноября 2018

Я пытаюсь поставить оператор case, этот оператор case основан на условии из 2 разных подзапросов.Моя проблема в том, что я не могу заставить его работать.

Этот подзапрос SQL дает счетчик, который я использую в операторе case.

Ошибка, которую я получаю:

Неправильный синтаксис около x и y.

(мои подзапросы)

Select 'Days=' as Days,
case
when x.yest >=0 then '1 Day'
when y.DayBefore <=3 then '1 Day'
else '2 Day'
end as Days
from
(
Select count(*) as yest 
from
[Main], [DailyStatus]
where Approved_Date is null
Submitted_Date = cast(LAST_WEEKDAY_DATE as date) x,

(
Select count(*) as DayBefore
 from [Main], [DailyStatus]
where Approved_Date is null
and Submitted_Date = dateadd(dd, -1, cast(LAST_WEEKDAY_DATE as date))
)y

Ниже приведены мои таблицы:

Main Approved_Date Submitted_Date

DailyStatus Last_Weekday_date

Я очень ценю любую помощь по этому вопросу.Спасибо, Шиха

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Сделайте отступ для вашего sql правильно, и это упростит поиск

Select 
  'Days=' as Days,
  case
    when x.yest >=0 then '1 Day'
    when y.DayBefore <=3 then '1 Day'
    else '2 Day'
  end as Days
from
(
  Select 
    count(*) as yest 
  from
    [Main]
    CROSS JOIN
    [DailyStatus]
  where 
    Approved_Date is nulL AND 
    Submitted_Date = cast(LAST_WEEKDAY_DATE as date) 
) x
CROSS JOIN
(
  Select 
    count(*) as DayBefore
  from 
    [Main]
    CROSS JOIN 
    [DailyStatus]
  where 
    Approved_Date is null and 
    Submitted_Date = dateadd(dd, -1, cast(LAST_WEEKDAY_DATE as date))
)y

Кроме того, выполнение таких объединений (from table1, table2) прекратилось 20 лет назад. Пожалуйста, используйте современный синтаксис соединения

0 голосов
/ 16 ноября 2018

Изменены синтаксические ошибки, а также некоторое форматирование, чтобы его было легче читать. PS - не фанат ваших неявных присоединений здесь. Вы должны быть явными, используя <join type> JOIN .... ON...

SELECT
      'Days=' AS [Days]
    , CASE
         WHEN [x].[yest] >= 0 THEN '1 Day'
         WHEN [y].[DayBefore] <= 3 THEN '1 Day'
      ELSE '2 Day'
      END AS     [Days]
FROM
    (
        SELECT
             COUNT(*) AS [yest]
        FROM
            [Main]
          , [DailyStatus]
        WHERE  [Approved_Date] IS NULL
             AND [Submitted_Date] = CAST([LAST_WEEKDAY_DATE] AS DATE)
    ) AS [x]
   ,
    (
        SELECT
             COUNT(*) AS [DayBefore]
        FROM
            [Main]
          , [DailyStatus]
        WHERE  [Approved_Date] IS NULL
             AND [Submitted_Date] = DATEADD([dd], -1, CAST([LAST_WEEKDAY_DATE] AS DATE))
    ) AS [y]
...