2017-01-25 2 views
0

Я работал над запросом, в соответствии с которым в подзапросе я выбираю столбец Cust_Status при определенных условиях.Подзапрос возвратил более 1 строки внутри оператора case

select distinct 
    C.Cust_Code [Cust #], 
    C.Cust_Start_Date [Start Date], 
    C.Cust_End_date [End Date], 
    (select 
     Cust_Status = (case 
          when cast(CUST_UPDATE_DATE_LT as DATE) = cast('2017-01-23 00:00:00' as Date) 
           then 'V' 
          when cast(CUST_UPDATE_DATE_LT as DATE) = cast('2017-01-22 00:00:00' as Date) 
           then 'I' 
         end) 
    from tblCustomers) [Cust Status], 
    M.Machine_ID, 
    M.Machine_Location 
from 
    tblCustomers C 
inner join 
    tblMachine M on C.Cust_Mach_Pkey = M.Pkey 

Когда я запускаю этот запрос, я получаю сообщение об ошибке

подзапрос возвращает более 1 ошибки значение.

Когда я удаляю подзапрос внутри корпуса, это нормально. Но я уверен, что есть только 1 запись для обеих дат. Поэтому не уверен, как мой подзапрос возвращает более 1 значения. Пожалуйста, просветите меня.

+1

(1) Пометьте свой вопрос в базе данных, которую вы используете. (2) Предоставить образцы данных и желаемые результаты. (3) Объясните логику, которую вы пытаетесь реализовать. –

+0

@ Gordon: Не имеет смысла публиковать трехточечный вопрос с просьбой предоставить дополнительную информацию, а затем опубликовать ответ, который отрицает необходимость или стимул для их предоставления. –

+0

Какая СУБД вы используете? Показанный код недействителен (стандартный) SQL. –

ответ

0

Я предполагаю, что вы просто хотите сравнить последнюю дату. Если это так, есть гораздо более простые способы:

select C.Cust_Code as [Cust #], C.Cust_Start_Date as [Start Date], 
     C.Cust_End_date as [End Date], 
     (case when max(cast(CUST_UPDATE_DATE_LT as DATE)) = '2017-01-23' 
      then 'V' 
      when max(cast(CUST_UPDATE_DATE_LT as DATE)) = '2017-01-22' 
      then 'I' 
     end) as Cust_status 
     M.Machine_ID, 
     M.Machine_Location 
from tblCustomers C inner join 
    tblMachine M 
    on C.Cust_Mach_Pkey = M.Pkey 
group by C.Cust_Code, C.Cust_Start_Date, C.Cust_End_date, 
     M.Machine_ID, M.Machine_Location 
+0

Спасибо за ваш ответ. Но я ищу ответ, если мой подзапрос в выражении selet возвращает более 1 строки, каково может быть решение? Например, выберите C.Cust_Code как [Cust #], C.Cust_Start_Date как [Дата начала], C.Cust_End_date как [Конечная дата], (случай, когда max (cast (CUST_UPDATE_DATE_LT как DATE)) = '2017-01- 23 ' , затем' V ' , когда max (cast (CUST_UPDATE_DATE_LT как DATE)) =' 2017-01-22 ' , затем' I ' конец) как Cust_status от tblCustomers. Как избежать этого подзапроса, возвращается более 1 ошибки значения. В выборе оператора i can not use IN – LT268

Смежные вопросы