Пытаясь вернуть Count для трех пронумерованных последовательностей,

Это кредиты, которые «созрели». Мне нужен счет для кредитов, которые наступают через 25 дней после даты погашения, 45 дней и остальные. Мне нужно назначить метку для каждого, чтобы я мог создать диаграмму iDashboard.

Я использую подзапрос, но считаю, что нужные мне данные находятся в ОДНОЙ таблице.

----------код-------------------

Select z.Status, Count(z.Status)

From (Select a.Account, a.MaturityDate
Case
When datediff(dd, getdate(),[MaturityDate]) between -44 and -25 Then 'Yellow - 25 Days'
When datediff(dd, getdate(),[MaturityDate]) <= -45 Then 'RED - 45 Days'
Else 'All Good'
End As Status

From (Select * From LNSLoan a ))
Group by z.Status

z.Status             Count
Yellow - 25 Days     128
RED - 45 Days        56
Rest of data         1138

Какой у Вас вопрос? Похоже, ваш запрос делает то, что вам нужно.

Gordon Linoff 09.04.2019 20:24

Почему у вас From (Select * From LNSLoan a )) вместо From LNSLoan a )?

Joakim Danielson 09.04.2019 20:27

Я изменил код, как было предложено, теперь я получаю это сообщение об ошибке. Сообщение 156, уровень 15, состояние 1, строка 6 Неверный синтаксис рядом с ключевым словом «Дело».

Cesar Terriquez 09.04.2019 20:46

Я новичок в этом, порекомендуете ли вы книгу или сайт, которые могут мне помочь?

Cesar Terriquez 09.04.2019 20:50
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, вы хотите что-то вроде этого:

select v.status, count(*)
from LNSLoan l cross apply
     (values (case when datediff(day, getdate(), l.MaturityDate) between -44 and -25
                   then 'Yellow - 25 Days'
                   when datediff(day, getdate(), l.MaturityDate) <= -45
                   then 'RED - 45 Days'
                   else 'All Good'
              end)
      ) v(status)
group by v.status;

Хм, для перекрестного применения скалярного выражения я обычно использую cross apply( select some_expr) вместо cross apply(values(some_expr)). Есть ли какая-то функциональная разница или только в предпочтениях по написанию?

George Menoutis 10.04.2019 14:19

@ДжорджМеноутис. . . Я нахожу values() более удобным.

Gordon Linoff 10.04.2019 14:49

Превосходно. Мне нужно прочитать о Cross Apply, какой чистый способ делать вещи. Большое спасибо.

Cesar Terriquez 10.04.2019 17:21

@CesarTerriquez . . . Технически CROSS APPLY реализует «боковые соединения». Они очень мощные и во многих отношениях являются расширением коррелированных подзапросов, но коррелированных подзапросов, которые могут возвращать несколько столбцов и несколько строк.

Gordon Linoff 10.04.2019 17:23

Другие вопросы по теме