инструкция case возвращает несколько строк - PullRequest
1 голос
/ 29 декабря 2011

Я хочу вернуть несколько строк в заявлении case. Является ли это возможным? или есть альтернативный способ сделать это?

select 
   case 
      when 3 = 1 
          then (select orderid from order_master where noOfInstallment = installmentPaid) 
      else 
          (select orderid from order_master where noOfInstallment <> installmentPaid) 
   END

Оба подзапроса возвращают несколько строк. Теперь над запросом отображается следующая ошибка.

Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется как выражение.

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

CASE в SQL Server - это , а не оператор управления потоком (он отличается от оператора switch в C #) - он просто используется для возврата одного из нескольких возможных значений.

Вам необходимо использовать IF операторы в T-SQL

IF 3 = 1
   select orderid from order_master where noOfInstallment = installmentPaid
ELSE
   select orderid from order_master where noOfInstallment <> installmentPaid

или что-то в этом роде.

0 голосов
/ 31 декабря 2011

Я получил решение.

 SELECT o.* FROM Order_Master as o Where 
   (
      ((@paymentStatus = 0) AND (o.noOfInstallment <> o.installmentPaid))
      OR 
      ((@paymentStatus=1) AND (o.noOfInstallment = o.installmentPaid)) 
   )
0 голосов
/ 29 декабря 2011

Вы не правильно используете формулировку дела, пожалуйста, ознакомьтесь с документацией .

Можете ли вы справиться с таким запросом:

select orderid,  
   case 
      when (noOfInstallment = installmentPaid) then
        'equal'   
      else 
        'not equal'
   END
from order_master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...