2017-02-13 22 views
1

両方の日付に対してselectステートメントを単独で実行すると、正しい日付が返されますが、コードに含まれている場合は表示されません。助けてください。SQL:無効な列名エラー

SELECT r.[Holding Co], 
     r.[Reference Order No], 
     r.Reg, 
     r.SL, 
     r.[Order Date], 
    CASE WHEN [Type]<>'Recovery' 
     AND [Status]<>'Inter' 
     AND [Status]<>'Cancelled' 
     AND [Order Date]<[Date Order] 
     AND [CICD Actual] IS NULL 
     OR [CICD Actual]>[Date Outstanding] 
    THEN 1 
    ELSE 0 End AS [Outstanding], 
    --CASE WHEN /* many more calculated fields and cases redacted for brevity ... */           
     Month([Date Outstanding]) AS [Month], 
     Year([Date Outstanding]) AS [Year], 
     CAST(FORMAT(GETDATE(), 'yyyy-MM-01') as Date) AS [Date Order], 
     DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) AS [Date Outstanding]  

FROM unisat.Register AS r; 

Error: Msg 207, Level 16, State 1, Line 3 Invalid column name 'Date Order'. Msg 207, Level 16, State 1, Line 4 Invalid column name 'Date Outstanding'

+0

両方の日付のSELECTステートメントを実行したとします。SELECT [Order Date]、[Date Order] FROM ... 'を使用したことを意味しますか? –

+0

エラーには、列名に問題があることが明確に記載されています。まず、それらを見てください。 – balaji

+0

ありがとうジョナサン、選択DATEADD(MONTH、DATEDIFF(MONTH、-1、GETDATE()) - 1、-1)これは私の[Date Outstanding]であり、Selectキャスト(フォーマット(GETDATE()、 'yyyy -MM-01 '))は[日付順] –

答えて

1

[優秀日付]はSELECTリストで導入され、あなたが何か他のもののための基礎として同じ選択リストでそれを使用することはできません。

私はCTEに(だけでなくて、[日付順])は、このための計算をリファクタリングすることをお勧めしたい、とあなたは、外側の選択でそれを使用することができ、このような何か:

;with x as (
    SELECT r.[Holding Co], 
      r.[Reference Order No], 
      r.Reg, 
      r.SL, 
      r.[Order Date], 
      r.[Type] , 
      r.[Status], 
      r.[CICD Actual], 
      CAST(FORMAT(GETDATE(), 'yyyy-MM-01') as Date) AS [Date Order], 
      DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1) AS [Date Outstanding]  
    FROM unisat.Register AS r 
) 
SELECT x.[Holding Co], 
    x.[Reference Order No], 
    x.Reg, 
    x.SL, 
    x.[Order Date], 
    CASE WHEN x.[Type]<>'Recovery' 
     AND x.[Status]<>'Inter' 
     AND x.[Status]<>'Cancelled' 
     AND x.[Order Date]<x.[Date Order] 
     AND x.[CICD Actual] IS NULL 
     OR x.[CICD Actual]>x.[Date Outstanding] 
     THEN 1 
     ELSE 0 End AS [Outstanding], 
    CASE WHEN /* many more calculated fields and cases redacted for brevity ... */           
    Month(x.[Date Outstanding]) AS [Month], 
    Year(x.[Date Outstanding]) AS [Year], 
    x.[Date Order], 
    x.[Date Outstanding] 
from x;