1

SQL Server 2008 を使用しています。次のクエリがあります。私がやりたいのは、存在するレコードがある場合、実際の日付を「N / A」に割り当てたい場合です。

   select ActualDate = (CASE
                         WHEN EXISTS
                         (select NeedHand from Truck 
                           where Truck.NeedHand = 0 and Truck.ID = '34343')
                         THEN
                          'N/A'
                         ELSE
                          SELECT  CreatedByDate from Hand  where ID = '34343'
                         END )

次のメッセージが表示されます: キーワード「select」付近の構文が正しくありません。

4

3 に答える 3

3

あなたの EXIST は EXISTS であるべきだと思います。

于 2012-08-07T15:57:34.187 に答える
0

クエリには多くの問題があります。以下のバージョンは、それらすべてを処理する必要があります。

select  ActualDate = 
CASE 
     WHEN EXISTS(
            select NeedHand from Truck 
            where Truck.NeedHand = 0 and Truck.ID = '34343'
            )
     THEN
               'N/A'
     ELSE
               (SELECT  CreatedByDate from Hand  where ID = '34343')
END

そうしなければならなかった :

  1. EXISTに変更EXISTS
  2. END CASEに変更END
  3. 最後のクエリを括弧で囲みます。
于 2012-08-07T16:00:51.467 に答える
0

オプション1

SELECT
(
    CASE
        WHEN 
                Exists(SELECT top 1 NeedHand FROM Truck 
                WHERE Truck.NeedHand = 0 and Truck.ID = '34343')
        THEN
                'N/A'
        ELSE
                (SELECT TOP 1 CreatedByDate FROM Hand WHERE ID = '34343')
    END 
)

オプション #2

SELECT
(
    CASE
        WHEN 
                ((SELECT top 1 NeedHand FROM Truck 
                WHERE Truck.NeedHand = 0 and Truck.ID = '34343') IS NOT NULL)
        THEN
                'N/A'
        ELSE
                (SELECT TOP 1 CreatedByDate FROM Hand WHERE ID = '34343')
    END 
)

Top 1次の問題を回避するために追加

サブクエリが複数の値を返しました。サブクエリが =、!=、<、<=、>、>= の後にある場合、またはサブクエリが式として使用されている場合、これは許可されません。

于 2012-08-07T16:02:52.217 に答える