2016-07-04 110 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