Как выполнить IF… THEN в SQL SELECT?

avatar
Eric Labashosky
15 сентября 2008 в 14:34
3945918
30
1631

Как выполнить IF...THEN в операторе SQL SELECT?

Например:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
Источник
Somebody
14 февраля 2012 в 21:21
16

Вы можете взглянуть на эту ссылку. Что касается предложений SQL WHERE: избегайте CASE, используйте логическую логику

onedaywhen
11 мая 2016 в 16:06
3

@Somebody: не очень актуально, потому что в статье говорится об использовании правил логической перезаписи для преобразования импликации в дизъюнкцию. Ключом к разгадке является слово «логический», то есть то, что разрешается как истинное или ложное, что не относится к проекции. Статья TL; DR применяется к WHERE и CHECK, но не к SELECT.

Murray Foxcroft
27 марта 2017 в 13:06
7

Ответ @MartinSmith самый элегантный - используйте IIF в SQL 2012+.

Ответы (30)

avatar
Darrel Miller
15 сентября 2008 в 14:38
1874

Оператор CASE наиболее близок к IF в SQL и поддерживается во всех версиях SQL Server.

SELECT CAST(
             CASE
                  WHEN Obsolete = 'N' or InStock = 'Y'
                     THEN 1
                  ELSE 0
             END AS bit) as Saleable, *
FROM Product

Вам нужно только выполнить CAST, если вы хотите получить результат в виде логического значения. Если вас устраивает int, это работает:

SELECT CASE
            WHEN Obsolete = 'N' or InStock = 'Y'
               THEN 1
               ELSE 0
       END as Saleable, *
FROM Product

CASE операторы могут быть встроены в другие операторы CASE и даже включены в агрегаты.

SQL Server Denali (SQL Server 2012) добавляет оператор IIF, который также доступен в доступе (на это указывает Мартин Смит <65089273265027>):

SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product

Archan Mishra
13 сентября 2011 в 15:41
59

Еще одно предостережение: не заключайте ваши условия в скобки при использовании case. Потребовалось довольно много времени, чтобы осознать это :)

Simon_Weaver
28 января 2014 в 10:52
19

и не забывай КОНЕЦ

Gerrie Pretorius
9 октября 2015 в 15:42
0

Хотя это работает, использование функции IFF () будет лучшим ответом.

katalin_2003
30 марта 2016 в 15:03
0

@ReeveStrife Вы имеете в виду IIF() msdn.microsoft.com/en-us/library/…

stuartdotnet
30 мая 2016 в 03:26
7

Только @ReeveStrife iif SQL Server 2012+

Bernard Walters
16 января 2017 в 12:30
1

@ArchanMishra Привет, Арчан, не могли бы вы объяснить мне, почему вы не должны заключать свои условия?

user170442
27 января 2017 в 12:21
2

Остерегайтесь грязных секретов CASE / IIF: sqlperformance.com/2014/06/t-sql-queries/…

Fandango68
21 марта 2017 в 03:22
1

@ArchanMishra, ты можешь. Я думал, он имел в виду, что это замедлит процесс, но нет. Вы можете использовать квадратные скобки в SQL Server столько раз, сколько захотите, если это логично для SQL.

Jacob Broughton
17 июля 2021 в 21:59
0

Спасибо, сэр, СЛУЧАЙ КОГДА был тем, что я искал!

avatar
yusuf hayırsever
25 ноября 2020 в 14:04
4
SELECT
if((obsolete = 'N' OR instock = 'Y'), 1, 0) AS saleable, *
FROM
product;
avatar
Prashant Marathay
9 апреля 2020 в 01:31
2

Мне нравится использование операторов CASE, но вопрос задан для оператора IF в SQL Select. Раньше я использовал:

SELECT

   if(GENDER = "M","Male","Female") as Gender

FROM ...

Это похоже на операторы IF в Excel или Sheet, где за условным условием следует истинное, а затем ложное условие:

if(condition, true, false)

Кроме того, вы можете вкладывать операторы if (но тогда используйте CASE :-)

(Примечание: это работает в MySQLWorkbench, но может не работать на других платформах)

Luuk
1 августа 2020 в 09:15
1

IF FUNCTION Кажется, присутствует в MySQL, но не в MSSQL, В MSSQL IIF может использоваться с версии 2012.

avatar
Tharuka
18 февраля 2020 в 10:42
4

Использование SQL CASE аналогично обычным операторам If / Else. В запросе ниже, если устаревшее значение = 'N' или если значение InStock = 'Y', то вывод будет 1. В противном случае вывод будет 0. Затем мы помещаем это значение 0 или 1 в столбец «Продажная».

SELECT
      CASE 
        WHEN obsolete = 'N' OR InStock = 'Y' 
        THEN 1 
        ELSE 0 
      END AS Salable
      , * 
FROM PRODUCT
Tharuka
18 февраля 2020 в 11:22
1

Это похоже на обычные операторы If / Else. Если устаревшее значение = 'N' или если значение InStock = 'Y', то вывод будет 1. В противном случае вывод будет 0.

user10216583
18 февраля 2020 в 11:39
2

Спасибо. Пожалуйста, отредактируйте свой пост, чтобы добавить это объяснение. Например: использование операторов If..Then...Else.. в SQL следующим образом ....

avatar
Salman A
28 ноября 2019 в 10:17
2

Для полноты я бы добавил, что SQL использует трехзначную логику. Выражение:

obsolete = 'N' OR instock = 'Y'

Может дать три разных результата:

| obsolete | instock | saleable |
|----------|---------|----------|
| Y        | Y       | true     |
| Y        | N       | false    |
| Y        | null    | null     |
| N        | Y       | true     |
| N        | N       | true     |
| N        | null    | true     |
| null     | Y       | true     |
| null     | N       | null     |
| null     | null    | null     |

Так, например, если продукт устарел, но вы не знаете, есть ли продукт на складе, тогда вы не знаете, продается ли продукт. Эту трехзначную логику можно записать следующим образом:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           WHEN NOT (obsolete = 'N' OR instock = 'Y') THEN 'false'
           ELSE NULL
       END AS saleable

Как только вы выясните, как это работает, вы можете преобразовать три результата в два результата, определив поведение null. Например. это будет рассматривать null как непригодное для продажи:

SELECT CASE
           WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
           ELSE 'false' -- either false or null
       END AS saleable
avatar
Muhammad Awais
31 октября 2019 в 12:06
3

Это будет примерно так:

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is under 30"
END AS QuantityText
FROM OrderDetails;
Bhavin Thummar
8 ноября 2019 в 12:14
1

Можем ли мы использовать значение QuantityText в условии where в запросе? например SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';

avatar
user11127093
28 февраля 2019 в 19:09
5

У вас может быть два варианта реализации:

  1. Использование IIF, представленного в SQL Server 2012:

    SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
    
  2. Использование Select Case:

    SELECT CASE
        WHEN Obsolete = 'N' or InStock = 'Y'
            THEN 1
            ELSE 0
        END as Saleable, *
        FROM Product
    
avatar
David Cohn
2 ноября 2018 в 15:44
4

Вопрос:

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product

ANSI:

Select 
  case when p.Obsolete = 'N' 
  or p.InStock = 'Y' then 1 else 0 end as Saleable, 
  p.* 
FROM 
  Product p;

Использование псевдонимов - в данном случае p - поможет предотвратить проблемы.

avatar
laplace
8 октября 2018 в 06:34
2
SELECT 
  CAST(
    CASE WHEN Obsolete = 'N' 
    or InStock = 'Y' THEN ELSE 0 END AS bit
  ) as Saleable, * 
FROM 
  Product
sɐunıɔןɐqɐp
8 октября 2018 в 06:52
8

Из отзыва: Добро пожаловать в Stack Overflow! Пожалуйста, не отвечайте только исходным кодом. Постарайтесь дать хорошее описание того, как работает ваше решение. См .: Как мне написать хороший ответ ?. Спасибо

Dodecaphone
5 апреля 2019 в 14:00
3

Я думаю, вы обнаружите, что это не выполняется, потому что отсутствует какой-либо вывод, следующий за ключевым словом THEN.

avatar
Serkan Arslan
31 января 2018 в 11:31
9

В качестве альтернативы оператору CASE можно использовать табличный подход:

DECLARE @Product TABLE (ID INT, Obsolete VARCHAR(10), InStock VARCHAR(10))
INSERT INTO @Product VALUES
(1,'N','Y'),
(2,'A','B'),
(3,'N','B'),
(4,'A','Y')

SELECT P.* , ISNULL(Stmt.Saleable,0) Saleable
FROM
    @Product P
    LEFT JOIN
        ( VALUES
            ( 'N', 'Y', 1 )
        ) Stmt (Obsolete, InStock, Saleable)
        ON  P.InStock = Stmt.InStock OR P.Obsolete = Stmt.Obsolete

Результат:

ID          Obsolete   InStock    Saleable
----------- ---------- ---------- -----------
1           N          Y          1
2           A          B          0
3           N          B          1
4           A          Y          1
Bhavin Thummar
8 ноября 2019 в 12:14
0

Где в запросе используется условие продажи?

Serkan Arslan
8 ноября 2019 в 12:36
0

Его можно использовать в каком состоянии.

avatar
user8422856
8 августа 2017 в 21:33
8
SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 
             END AS Saleable, * 
FROM Product
avatar
SURJEET SINGH Bisht
30 ноября 2016 в 11:05
5
  SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product
Vince Bowdren
30 ноября 2016 в 16:27
7

Привет Сурджит Сингх Бишт; ваш код может быть правильным, но с некоторым контекстом он даст лучший ответ; например, вы могли бы объяснить, как и почему это предлагаемое изменение решит проблему, задавшую вопрос, возможно, включая ссылку на соответствующую документацию. Это сделало бы его более полезным для них, а также для других читателей сайта, которые ищут решения аналогичных проблем.

S.L. Barth
30 ноября 2016 в 19:20
5

Этот ответ не добавляет ничего нового. Фактически, эта же самая линия была частью принятого ответа более 5 лет.

Ivan Rascon
26 января 2017 в 16:24
1

Кроме того, важно отметить, что IIF применяется только для SQL Server, начиная с 2012 года.

avatar
onedaywhen
11 мая 2016 в 15:56
18
SELECT 1 AS Saleable, *
  FROM @Product
 WHERE ( Obsolete = 'N' OR InStock = 'Y' )
UNION
SELECT 0 AS Saleable, *
  FROM @Product
 WHERE NOT ( Obsolete = 'N' OR InStock = 'Y' )
avatar
sandeep rawat
26 апреля 2016 в 15:10
24

Новая функция, IIF (которую мы можем просто использовать), была добавлена ​​в SQL Server 2012:

SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
jk7
31 октября 2018 в 19:47
1

Этот ответ повторяет (с меньшими подробностями) то, что уже было предоставлено в ответе Мартина Смита несколько лет назад.

sandeep rawat
1 ноября 2018 в 02:46
1

@ jk7 это был первый ответ на вопрос.

jk7
2 ноября 2018 в 14:40
4

Не из того, что я вижу. В нем говорится, что ваш ответ был опубликован 26 апреля 2016 года, а ответ Мартина - 20 июля 2011 года.

avatar
JustJohn
11 февраля 2016 в 21:35
12

Это не ответ, а просто пример оператора CASE, который используется там, где я работаю. Он имеет вложенный оператор CASE. Теперь вы знаете, почему у меня косые глаза.

 CASE orweb2.dbo.Inventory.RegulatingAgencyName
    WHEN 'Region 1'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 2'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'Region 3'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
    WHEN 'DEPT OF AGRICULTURE'
        THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg
    ELSE (
            CASE orweb2.dbo.CountyStateAgContactInfo.IsContract
                WHEN 1
                    THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty
                ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState
                END
            )
    END AS [County Contact Name]
JustJohn
12 октября 2016 в 16:30
1

Правка, переформатировавшая операторы Case, прекрасна и изящна и делает ее более понятной, но SQL все равно будет скучать в представлении, которое его использует.

Mr.J
22 марта 2017 в 07:16
1

Я просто блуждаю, почему CASE получил одобрение и помечен как ответ вместо IF, который должен был быть ответом, как этот, это все еще утверждение CASE, а не IF.

JosephDoggie
2 октября 2018 в 16:40
0

@ Mr.J: хотя это и не мой ответ, «случай» обобщает «если-то-еще» (от двух до многих)

avatar
Ravi Anand
17 декабря 2015 в 17:24
31

Простой оператор if-else в SQL Server:

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';

GO

Вложенный оператор If ... else в SQL Server -

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand.';
ELSE
BEGIN
IF @val < 50
  PRINT 'what''s up?';
ELSE
  PRINT 'Bye Ravi Anand.';
END;

GO
abdul qayyum
17 февраля 2019 в 10:23
2

Поздно, но можно ли его использовать внутри SELECT, как спросил OP?

avatar
Chanukya
9 декабря 2015 в 12:15
13
case statement some what similar to if in SQL server

SELECT CASE 
            WHEN Obsolete = 'N' or InStock = 'Y' 
               THEN 1 
               ELSE 0 
       END as Saleable, * 
FROM Product
Guanxi
9 декабря 2015 в 13:32
2

Не могли бы вы пояснить, как это отвечает на заданный вопрос?

JosephDoggie
2 октября 2018 в 16:39
0

@Guanxi: хотя это и не мой ответ, «случай» обобщает «если-то-еще» (от двух до многих)

avatar
Mohammad Atiour Islam
25 августа 2015 в 09:44
16
SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newref
From profile
avatar
Dibin
8 января 2014 в 10:18
5

Для тех, кто использует SQL Server 2012, IIF - это функция, которая была добавлена ​​и работает как альтернатива операторам Case.

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product 
jk7
31 октября 2018 в 19:44
1

Этот ответ повторяет (с меньшими подробностями) то, что уже было предоставлено в ответе Мартина Смита несколько лет назад.

avatar
Tomasito
8 июня 2013 в 22:21
22

Использовать чисто битовую логику:

DECLARE @Product TABLE (
    id INT PRIMARY KEY IDENTITY NOT NULL
   ,Obsolote CHAR(1)
   ,Instock CHAR(1)
)

INSERT INTO @Product ([Obsolote], [Instock])
    VALUES ('N', 'N'), ('N', 'Y'), ('Y', 'Y'), ('Y', 'N')

;
WITH cte
AS
(
    SELECT
        'CheckIfInstock' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Instock], 'Y'), 1), 'N'), 0) AS BIT)
       ,'CheckIfObsolote' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Obsolote], 'N'), 0), 'Y'), 1) AS BIT)
       ,*
    FROM
        @Product AS p
)
SELECT
    'Salable' = c.[CheckIfInstock] & ~c.[CheckIfObsolote]
   ,*
FROM
    [cte] c

См. рабочую демонстрацию: если то без case в SQL Server.

Для начала необходимо вычислить значения true и false для выбранных условий. Вот два NULLIF:

for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)

вместе дает 1 или 0. Затем используйте побитовые операторы.

Это самый метод WYSIWYG.

Riegardt Steyn
22 июня 2013 в 08:47
19

-1 для обфускации кода. Серьезно, это настолько далеко от WYSIWYG, насколько это возможно! Рыжий нечитаемый беспорядок, и если бы мне пришлось поработать над вашим кодом, я бы весь день ругался ... извините: - /

Tomasito
23 июня 2013 в 09:52
2

@Heliac поместил cte часть в View, и вы никогда не увидите беспорядка. Для длинных и сложных AND, OR, NOT он более читабелен, чем CASE (эта часть, конечно, вне cte).

Mark Hurd
16 ноября 2016 в 00:19
1

Я дал ему +1 за аккуратность, как только он находится в cte, но обратите внимание, что в настоящее время ответ на вопрос неверен. Вам нужен символ '|' не "&".

objectNotFound
24 ноября 2017 в 17:04
3

Полностью согласен с @Heliac. Хотя он синтаксически правильный и отлично работает, его нелегко поддерживать. Помещение его в CTE просто переместит этот нечитаемый код в другое место.

Suncat2000
30 ноября 2018 в 13:19
1

Табличный метод проверки комбинации может иметь свои преимущества. Использование табличной переменной и ее присоединение к существующему запросу может обеспечить решение на основе набора без учета регистра. Этот ответ - плохой пример, но сама идея таблицы имеет свои достоинства.

avatar
Robert B. Grossman
26 октября 2012 в 15:30
11

Если вы впервые вставляете результаты в таблицу, а не переносите результаты из одной таблицы в другую, это работает в Oracle 11.2g:

INSERT INTO customers (last_name, first_name, city)
    SELECT 'Doe', 'John', 'Chicago' FROM dual
    WHERE NOT EXISTS 
        (SELECT '1' from customers 
            where last_name = 'Doe' 
            and first_name = 'John'
            and city = 'Chicago');
Malachi
27 декабря 2012 в 15:46
4

теги говорят SQL Server, TSQL

avatar
Martin Smith
20 июля 2011 в 23:39
291

В SQL Server 2012 вы можете использовать IIF функцию для этого.

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product

По сути, это просто сокращенный (хотя и не стандартный SQL) способ записи CASE.

Я предпочитаю краткость по сравнению с расширенной версией CASE.

И IIF(), и CASE разрешаются как выражения в операторе SQL и могут использоваться только в четко определенных местах.

Выражение CASE не может использоваться для управления потоком выполнения Операторы Transact-SQL, блоки операторов, пользовательские функции и хранимые процедуры.

Если ваши потребности не могут быть удовлетворены этими ограничениями (например, необходимость возвращать наборы результатов различной формы в зависимости от некоторого условия), тогда SQL Server также имеет процедурное ключевое слово IF.

IF @IncludeExtendedInformation = 1
  BEGIN
      SELECT A,B,C,X,Y,Z
      FROM   T
  END
ELSE
  BEGIN
      SELECT A,B,C
      FROM   T
  END

Однако иногда необходимо проявлять осторожность, чтобы избежать проблем с анализом параметров при таком подходе.

Mr.J
16 марта 2017 в 03:27
6

Это должен быть ответ, если вам нужен оператор IF .. then в SQL.

avatar
Ken
6 января 2010 в 01:02
47

Из этой ссылки, мы можем понять IF THEN ELSE в T-SQL:

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'ALFKI')
  PRINT 'Need to update Customer Record ALFKI'
ELSE
  PRINT 'Need to add Customer Record ALFKI'

IF EXISTS(SELECT *
          FROM   Northwind.dbo.Customers
          WHERE  CustomerId = 'LARSE')
  PRINT 'Need to update Customer Record LARSE'
ELSE
  PRINT 'Need to add Customer Record LARSE' 

Разве этого не достаточно для T-SQL?

Jonathan
10 апреля 2013 в 08:06
3

Это не то, чего хотел инициатор запроса, но очень полезно знать, что вы можете использовать операторы if вне оператора select.

JustJohn
11 февраля 2016 в 21:12
2

EXISTS хорош, потому что он выпадает из цикла поиска, если элемент найден. COUNT выполняется до конца строк таблицы. Ничего общего с вопросом, но кое-что нужно знать.

avatar
Jonathan
15 сентября 2008 в 15:10
345

Оператор case - ваш друг в этой ситуации и принимает одну из двух форм:

Простой случай:

SELECT CASE <variable> WHEN <value>      THEN <returnvalue>
                       WHEN <othervalue> THEN <returnthis>
                                         ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

Расширенный регистр:

SELECT CASE WHEN <test>      THEN <returnvalue>
            WHEN <othertest> THEN <returnthis>
                             ELSE <returndefaultcase>
       END AS <newcolumnname>
FROM <table>

Вы даже можете поместить операторы case в предложении order by для действительно необычного упорядочивания.

Ben
18 июня 2012 в 10:22
33

Я знаю, что это старый, но я думаю, что следует отметить, что вы можете добавить AS Col_Name после END, чтобы назвать результирующий столбец

Hogan
15 апреля 2016 в 20:32
9

Мне всегда кажется, что второй проще.

magnum_pi
18 мая 2016 в 16:34
4

Согласен, я почти всегда использую расширенный оператор case, потому что условия, которые я хочу протестировать, всегда сложнее, чем просто одна переменная. Мне также легче читать.

Remus.A
23 февраля 2018 в 11:24
2

Хорошее объяснение обеих ситуаций, с переменной или без нее. С переменной условие должно удовлетворять равенству между переменной после оператора case и той, на которой вы основываете свое условие, без переменной вы можете добавить самодостаточное условие для проверки.

Michael Fronzek
25 ноября 2020 в 11:20
0

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

avatar
Christopher
15 сентября 2008 в 14:40
24

Используйте оператор CASE:

SELECT CASE
       WHEN (Obsolete = 'N' OR InStock = 'Y')
       THEN 'Y'
       ELSE 'N'
END as Available

etc...
avatar
user7658
15 сентября 2008 в 14:40
49

Microsoft SQL Server (T-SQL)

В select используйте:

select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end

В предложении where используйте:

where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end
maksymiuk
7 июня 2019 в 22:04
1

почему бы вам просто не сделать where Obsolete = 'N' or InStock = 'Y' и практически не разрезать где пополам

avatar
sven
15 сентября 2008 в 14:39
101

Вы можете найти несколько хороших примеров в Сила SQL CASE-выражений , и я думаю, что вы можете использовать такой оператор (от 4guysfromrol>):

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees
Sam Saffron
19 августа 2011 в 02:47
4

см .: meta.stackexchange.com/questions/103053/… для интересного обсуждения. Две предоставленные вами ссылки добавляют дополнительный контекст, который я поддерживаю.

baymax
7 декабря 2016 в 14:56
2

Ссылка действительно полезна и настоятельно рекомендуется в случае дополнительных деталей.

avatar
Santiago Cepas
15 сентября 2008 в 14:37
45
 SELECT
   CASE 
      WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' 
      ELSE 'FALSE' 
   END AS Salable,
   * 
FROM PRODUCT
avatar
palehorse
15 сентября 2008 в 14:37
78

Используйте CASE. Что-то вроде этого.

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END
avatar
John Sheehan
15 сентября 2008 в 14:37
49
SELECT  
(CASE 
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
                                            ELSE 'NO' 
 END) as Salable
, * 
FROM Product