2016-07-04 112 views
2

请帮我改正查询。这里的别名“startDate”不能识别。SQL别名不能识别

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

哦!好的谢谢。我会尝试另一种方式。 –

+1

使用CTE或派生查询。否则是在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