#sql #sql-server
#sql #sql-сервер
Вопрос:
Я получаю ошибку в названии этого поста. Ошибка возникает, когда в запрос включается самый последний оператор case. Если будет удалена последняя инструкция case, скрипт запустится.
В чем может быть проблема?
USE Reporting DECLARE @QuarterBeginDate date = '07-01-2021' DECLARE @QuarterEndDate date = '09-30-2021' SELECT GETDATE() AS RefreshDate, ROW_NUMBER() OVER (ORDER BY RowID) RowID, ReportDate AS ReportDate, AssetName AS [Investment Name], BuildingName AS [Property Name], '3Q21' AS QTR, TenantName AS [Tenant Name], CASE WHEN LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate THEN LeaseType WHEN ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate THEN 'Vacate' ELSE 'N/A' END AS [Lease Type], SpaceLeaseArea AS [Sq Ft], CASE WHEN LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate THEN IncomeStartDate WHEN ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate THEN ReportLeaseEndDate ELSE 'N/A' END AS [Rent Start Date or Date Vacated], CASE WHEN LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate THEN IncomeEndDate WHEN ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate THEN 'N/A' ELSE 'N/A' END AS [Rent/Lease End Date] FROM dbo.LeaseData WHERE (LeaseSignedDate BETWEEN @QuarterBeginDate AND @QuarterEndDate) OR (ReportLeaseEndDate BETWEEN @QuarterBeginDate AND @QuarterEndDate)
Комментарии:
1. Потому что ваше последнее выражение case возвращает несколько типов данных, что вы не можете сделать. Поэтому для строк, которые возвращали бы «N/A», он пытается преобразовать это в дату и время. Пусть ваш запрос возвращает значение NULL, и если вы хотите отобразить N/A, это будет то, что вы обрабатываете на уровне представления, а не в базе данных.
2. вам нужно либо следовать приведенным выше советам, либо привести свои даты в строку — ошибка заключается в том, что выражение case следует порядку приоритета типов данных и пытается привести
'N/A'
в качестве даты