Предложение Where для группы столбцов

#mysql #sql #select #where-clause

#mysql #sql #выберите #предложение where

Вопрос:

У меня есть данные, которые поступают из розничного магазина, и столбцы приведены ниже

 col_1   qty_1   col_2    qty_2    col_3     qty_3
Green   5       Red        8      Yellow     10
  

Если я хочу узнать количество зеленого цвета, то я могу написать простой запрос с где col_1 = ‘Зеленый’.

Но я не получаю зеленый цветовой код только в col_1. Он продолжает перетасовывать между col_1, col_2 и col_3, как показано ниже

 col_1   qty_1   col_2    qty_2    col_3     qty_3
Green   5       Red        8      Yellow     10
Yellow  10      Green      7      Red        20
  

Как я могу выполнить один запрос для извлечения количества доступного зеленого цвета без изменения запроса каждый раз?

Комментарии:

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

Ответ №1:

 select case when col_1 = 'Green' then qty_1
            when col_2 = 'Green' then qty_2
            when col_3 = 'Green' then qty_3
       end as qty
from your_table
where 'Green' in (col_1, col_2, col_3)
  

Комментарии:

1. Иногда я получаю нулевые значения для ‘Green’, как мы можем с этим справиться?

2. Как вы хотите, чтобы это обрабатывалось, если qty столбец не имеет значения, когда col он зеленый ?

3. Если оно равно null, то должно быть возвращено последнее ненулевое значение

4. Или возвращать только ненулевые строки. Я могу упорядочить по времени, чтобы извлечь последнее значение

5. вам лучше записать это в новый вопрос с примерами данных и ожидаемым результатом.

Ответ №2:

Чтобы устранить проблему с нулевыми значениями, вы можете использовать условие COALESCE (), если оно равно NULL, то оно будет пустым:

 SELECT case when COALESCE(col_1,'') = 'Green' then qty_1
            when COALESCE(col_2,'') = 'Green' then qty_2
            when COALESCE(col_3,'') = 'Green' then qty_3
            end as qty
FROM your_table
WHERE 'Green' IN ( COALESCE(col_1,''), COALESCE(col_2,''), COALESCE(col_3,'') )
;
  

Комментарии:

1. Если я попытаюсь выбрать * из your_table, где ‘Green’ В (col1, col2, col3), то это не вернет никакого значения : (