Select if sql: sql server — How do I perform an IF…THEN in an SQL SELECT?

mysql — ‘IF’ в операторе ‘SELECT’ — выберите выходное значение на основе значений столбца

спросил

Изменено
2 месяца назад

Просмотрено
1,6 млн раз

 ВЫБРАТЬ id, сумма ИЗ отчета
 

Мне нужно сумма будет сумма , если report.type='P' и -сумма , если report.type='N' . Как мне добавить это к вышеуказанному запросу?

  • mysql
  • sql
  • база данных

0

 ВЫБЕРИТЕ идентификатор,
       ЕСЛИ (тип = 'P', количество, количество * -1) как количество
ОТ отчета
 

См. https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html.

Кроме того, вы можете обрабатывать, когда условие равно null. В случае нулевой суммы:

 ВЫБЕРИТЕ идентификатор,
       ЕСЛИ (тип = 'P', IFNULL (сумма, 0), IFNULL (сумма, 0) * -1) как сумма
ОТ отчета
 

Часть IFNULL(amount,0) означает , когда сумма не равна нулю, возвращаемая сумма иначе возвращается 0 .

6

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

 select id,
    отчет о случае.тип
        когда 'P' тогда сумма
        когда 'N' тогда -сумма
    конец как сумма
от
    `отчет`
 

3

 ВЫБЕРИТЕ Название компании,
    СЛУЧАЙ, КОГДА Страна В («США», «Канада»), ТОГДА «Северная Америка»
         КОГДА Страна = "Бразилия", ТОГДА "Южная Америка"
         ИНАЧЕ 'Европа' ЗАКАНЧИВАЕТСЯ КАК КОНТИНЕНТ
ОТ поставщиков
ЗАКАЗАТЬ ПО CompanyName;
 

1

 выбрать
  идентификатор,
  случай
    когда тип_отчета = 'P'
    затем сумма
    когда тип_отчета = 'N'
    затем -сумма
    иначе ноль
  конец
со стола
 

0

Самый простой способ — использовать IF(). Да, Mysql позволяет выполнять условную логику. ЕСЛИ функция принимает 3 параметра УСЛОВИЕ, ИСТИННЫЙ РЕЗУЛЬТАТ, ЛОЖНЫЙ РЕЗУЛЬТАТ.

Итак, логика

, если report.type = 'p'
    сумма = сумма
еще
    сумма = -1*сумма
 

SQL

 ВЫБРАТЬ
    id, IF(report.type = 'P', абс(сумма), -1*абс(сумма)) как сумма
ОТ отчета
 

Вы можете пропустить abs(), если все no +ve только

0

 ВЫБРАТЬ id, сумма
ОТ отчета
ГДЕ тип = 'P'
СОЮЗ
ВЫБЕРИТЕ идентификатор, (сумма * -1) КАК сумма
ОТ отчета
ГДЕ тип = 'N'
ЗАКАЗАТЬ ПО id;
 

1

Вы также можете попробовать это

 SELECT id , IF(type='p', IFNULL(amount,0), IFNULL(amount,0) * -1) как сумма ИЗ таблицы
 

сервер sql — использование оператора If else в операторе SQL Select

спросил

Изменено
3 года, 2 месяца назад

Просмотрено
541 тысяч раз

У меня есть оператор выбора, который возвращает 2 столбца.

 ID | IDParent
 

Затем в моей программе я должен проверить , если IDParent < 1, затем использовать ID ELSE, использовать IDParent

Есть ли способ использовать условие If Else в SQL для возврата только одного значения?

  • sql
  • sql-сервер

2

вы можете использовать CASE

 SELECT ...,
         CASE WHEN IDParent < 1 THEN ID ELSE IDPArent END AS ColumnName,
         ...
ИЗ имя_таблицы
 

Здесь, используя CASE Statement , найти результат:

 выбрать (случай, когда условие1, затем результат1
             когда условие2, то результат2
             иначе результат3
             end) как имя столбца из tablenmae:
 

Например:

 выберите (СЛУЧАЙ, КОГДА IDParent< 1, затем ID
             иначе IDParent END) как имя столбца
из таблицы
 
 ВЫБЕРИТЕ РЕГИСТР, КОГДА IDParent < 1
            ТОГДА ID
            ИНАЧЕ IDParent
       END AS имя столбца
ОТ вашей таблицы
 

Вот два способа "ЕСЛИ" или "СЛУЧАЙ".

 ВЫБЕРИТЕ, ЕСЛИ (ИМЯ_СТОЛБЦА = "ЗНАЧЕНИЕ", "ЗНАЧЕНИЕ_1", "ЗНАЧЕНИЕ_2") КАК ИМЯ_СТОЛБЦА
ИЗ ТАБЛИЦЫ_ИМЯ;
 

ИЛИ

 ВЫБЕРИТЕ (СЛУЧАЙ, КОГДА COLUMN_NAME = "VALUE", THEN 'VALUE_1' ELSE 'VALUE_2' END) AS COLUMN_NAME
ИЗ ТАБЛИЦЫ_ИМЯ;
 

Запрос будет выглядеть следующим образом:

 SELECT (СЛУЧАЙ, КОГДА tuLieuSo равно null или tuLieuSo=''
            ТОГДА 'Chưa có đĩa'
            ELSE 'Có đĩa' Конец) AS tuLieuSo,moTa
ОТ [gPlan_datav3_SQHKTHN].[dbo].[gPlan_HoSo]
 

sql сервер 2012

 с
  студент как
(выберите сид,год от (
значения (101,5),(102,5),(103,4),(104,3),(105,2),(106,1),(107,4)
) как студент(сид,год)
)
выберите iif(year=5,sid,year) как myCol,* от студента
 мой кол сид года
101 101 5
102 102 5
4 103 4
3 104 3
2 105 2
1 106 1
4 107 4
 

Вот пример использования CASE WHEN

 SELECT
    СЛУЧАЙ, КОГДА А > 1, ТОГДА
            «Больше 1»
    КОНЕЦ
ИЗ ТРЕУГОЛЬНИКОВ
 

.

 ВЫБОР
    СЛУЧАЙ, КОГДА А > 1, ТОГДА
            А
    КОНЕЦ
ИЗ ТРЕУГОЛЬНИКОВ
 

.

 ВЫБОР
    СЛУЧАЙ, КОГДА A > 1 и B > 1, ТО
            «Больше 1»
    КОНЕЦ
ИЗ ТРЕУГОЛЬНИКОВ
 

.

 ВЫБОР
    СЛУЧАЙ, КОГДА А > 1, ТОГДА
            'больше 1'
         ЕЩЕ
            'менее 1'
    КОНЕЦ
ИЗ ТРЕУГОЛЬНИКОВ
 

.

 ВЫБОР
    СЛУЧАЙ, КОГДА А > 1, ТОГДА
            'больше 1'
         ИНАЧЕ СЛУЧАЙ, КОГДА A >= 0, ТОГДА
                      'больше или равно 0'
                   ЕЩЕ
                      'меньше 0'
              КОНЕЦ
    КОНЕЦ
ИЗ ТРЕУГОЛЬНИКОВ;
 

Надеюсь, это поможет

Вы можете использовать просто if оператор под select запрос, как я описал ниже

if(some_condition,if_satisfied,not_satisfied)

 SELECT IF(IDParent < 1,ID,IDParent) FROM yourTable ;
 

1

Вы также можете использовать конструкцию объединения. Я не уверен, является ли CASE обычной конструкцией SQL...

 SELECT ID FROM tabName WHERE IDParent<1 OR IDParent IS NULL
СОЮЗ
ВЫБЕРИТЕ IDParent ИЗ tabName, ГДЕ IDParent> 1
 
 выбрать
СЛУЧАЙ, КОГДА IDParent < 1, тогда ID иначе IDParent END as colname
с вашего стола
 

У меня есть запрос с этим результатом:

 ВЫБЕРИТЕ Верхние 3
идентификатор,
Тип оплаты
ОТ dbo.