2016-07-29 7 views
0
以下は

です。私のSQLクエリの一部ですが、それはかなり長いためです。SQL:ケースの問題、変換日

私の選択ステートメントにCASEを追加すると、エラーが発生するという問題があります。 NSOレビュー列には日付が含まれています。ただし、すべての行の日付ではなく、クエリでは '1900-01-01'が代わりに使用されます。私はこれをNOに置き換え、他の値があればYESを入れます。あなたは、オブジェクトまたは列名が見つからないか、空れる

SELECT 'NSO Review' = ISNULL(tblTaskEventsHistory.TimeIn,''), 
     CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102)) 
     WHEN '1900' THEN 'NO' 
     ELSE 'YES' 
     END,  
     'Business Group' = ISNULL(MetadataBG.Value,''), 
     'CTN' = ISNULL(MetadataCT.Value,''), 

ERROR

メッセージ1038、レベル15、状態5、ライン277 助けてくださいでした。 SELECT INTOステートメントの場合、各列に名前があることを確認します。他のステートメントの場合は、空のエイリアス名を探します。 ""または[]と定義された別名は使用できません。エイリアスを有効な名前に変更します。

+2

使用しているRDBMSにタグを付けてください。エラーメッセージはコードにありません – TheGameiswar

答えて

0

あなたがすべき、前に述べたように、 DateTime関数を使用します。 日付の一部を比較するには、DATEPART (https://msdn.microsoft.com/en-us/library/ms174420.aspx)という関数があります。

その後、あなたはこれを試みることができる:

SELECT 
CASE WHEN DATEPART(yy, tblTaskEventsHistory.TimeIn) = 1900 THEN 'NO' 
ELSE 'YES' 
END AS Status; 

が、それはあなたを助けるちゃう願っています。

1

エラーメッセージ従ってください:「『エイリアスとして定義された』または[]許可」と「各列は」名前を持って検証されていません。

SELECT NSO_Review = ISNULL(tblTaskEventsHistory.TimeIn,''), 
     TimeIn = CASE CAST(tblTaskEventsHistory.TimeIn AS varchar(102)) 
     WHEN '1900' THEN 'NO' 
     ELSE 'YES' 
     END, 
+0

SELECT INTOには忘れてしまいました。 – MaciejPL

+0

ITSは以下のようにworkigされているが、私はすべてのYESesが\t 'NSOレビュー' = ISNULL(tblTask​​EventsHistory.TimeIn、 '')、 \t \t CASE \t tblTask​​EventsHistory.TimeIn \t \t \t 'を1900' を 'NO' SELECT 取得 \t \t ELSE 'YES' \t \t END AS NSORequest、 – MaciejPL

0

ケースステートメントの列の名前が見つかりませんでした。