2016-07-04 2 views
2

Пожалуйста, помогите мне исправить запрос. Здесь псевдоним «startDate» не идентифицируется.SQL alias не идентифицирует

SELECT TOP 1 a.[ID]       
    ,b.[Name] 
    ,a.[VName] 
    ,a.[StartKM] 
    ,a.[RecurringKM] 
    ,dateadd (day,-(120000 - a.[StartKM])/80,GETDATE())as startDate 
    ,dateadd(day,(a.[RecurringKM]/80),[startDate])as [DueDate] 
FROM MaintenanceEventInstance AS a 
INNER JOIN MaintenanceEventDescriptor AS b ON a.ID=b.ID 
WHERE a.VName='test' AND a.CompletedDate IS NULL AND 
    a.ReType='4' 
order by [DueDate] asc 

Любая помощь будет оценена по достоинству.

+0

Вы не можете использовать псевдоним в secon Параметр в списке – Jens

+0

oh! хорошо спасибо. Я попробую по-другому. –

+1

использует CTE или производный запрос. Else должен использовать полное выражение в вычислении DueDate. – Squirrel

ответ

1

Вы не можете использовать столбец псевдоним в этом же выбрать, вместо того, чтобы добавить выражение там,

SELECT TOP 1 a.[ID] 
      ,b.[Name] 
      ,a.[VName] 
      ,a.[StartKM] 
      ,a.[RecurringKM] 
      ,dateadd (day,-(120000 - a.[StartKM])/80,GETDATE())as startDate 
      ,dateadd(day,(a.[RecurringKM]/80),dateadd (day,-(120000 - a.[StartKM])/80,GETDATE()))as [DueDate] 
FROM MaintenanceEventInstance AS a 
INNER JOIN MaintenanceEventDescriptor AS b ON a.ID=b.ID 
WHERE a.VName='test' AND a.CompletedDate IS NULL AND 
    a.ReType='4' order by [DueDate] as 
2

Вы не можете использовать псевдоним в предложении SELECT. Попробуйте это вместо:

SELECT TOP 1 a.[ID] 
      ,b.[Name] 
      ,a.[VName] 
      ,a.[StartKM] 
      ,a.[RecurringKM] 
      ,x.startDate 
      ,dateadd(day,(a.[RecurringKM]/80),x.[startDate])as [DueDate] 
FROM MaintenanceEventInstance AS a 
INNER JOIN MaintenanceEventDescriptor AS b ON a.ID=b.ID 
CROSS APPLY (SELECT dateadd (day,-(120000 - a.[StartKM])/80,GETDATE())) AS x(startDate) 
WHERE a.VName='test' AND a.CompletedDate IS NULL AND 
     a.ReType='4' order by [DueDate] asc 
Смежные вопросы