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

セカンドでエイリアスを使用することはできません。選択中のパラメータ – Jens

+0

oh!大丈夫です。私は別の方法を試みます。 –

+1

CTEまたは派生クエリを使用します。それ以外の場合は、DueDate計算で完全な式を使用します。 – Squirrel

答えて

1

あなたはSELECT句で別名を使用することはできません

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 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 
関連する問題