Sql server 2008 sql server案例-在关键字';选择';

Sql server 2008 sql server案例-在关键字';选择';,sql-server-2008,Sql Server 2008,我正在使用SQLServer2008。 我有以下疑问。 我喜欢做的是,如果存在记录,我喜欢将实际日期指定给“N/a” 否则我希望它是手头上的CreatedBy日期 select ActualDate = (CASE WHEN EXISTS (select NeedHand from Truck where Truck.NeedHand

我正在使用SQLServer2008。 我有以下疑问。 我喜欢做的是,如果存在记录,我喜欢将实际日期指定给“N/a” 否则我希望它是手头上的CreatedBy日期

   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”附近的语法不正确。

我认为您的EXIST应该存在。

您的查询存在许多问题。以下版本应考虑所有这些问题:

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
我必须:

  • 存在
    更改为
    存在
  • END CASE
    更改为
    END
  • 在上一个查询周围添加paren 选项1 选项2 添加了
    Top 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 
    )
    
    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 
    )