Как перевести мой оператор Excel If в SQL-запрос

У меня возникла небольшая проблема с переводом моего оператора excel if в предложение CASE. Ниже я разместил свой текущий оператор SQL и оператор IF, который я пытаюсь вписать. В идеале я хотел бы, чтобы он находился в предложении Where, но если мне нужен другой столбец, я возьму его. Жирным шрифтом выделен другой заголовок.

Из-за того, как настроено мое предложение where, это означает, что я получаю только половину результатов.

ЕСЛИ заявление =IF(PD = "AC","S",IF(PD = "CS","S",IF(PD = "CA","S",IF(**PT="SS","S"," ")**)))

Текущий SQL

SELECT 

AEOrdersReceivedCurrentQuarter.`Order Company`
, AEOrdersReceivedCurrentQuarter.`Sop Order Number`
, AEOrdersReceivedCurrentQuarter.`Order Date`
, AEOrdersReceivedCurrentQuarter.`Order Method`
, AEOrdersReceivedCurrentQuarter.`Payment Method`
, AEOrdersReceivedCurrentQuarter.`Product Type`
, AEOrdersReceivedCurrentQuarter.`Product Sub Type`
, AEOrdersReceivedCurrentQuarter.`Product Description`
, AEOrdersReceivedCurrentQuarter.`Quantity Ordered`
, AEOrdersReceivedCurrentQuarter.`Product Item Value`
, AEOrdersReceivedCurrentQuarter.`Order Count`
, AEOrdersReceivedCurrentQuarter.`Order Item Narrative`
, AEOrdersReceivedCurrentQuarter.`Product Group`
, AEOrdersReceivedCurrentQuarter.`Product Category`

FROM AEOrdersReceivedCurrentQuarter.csv AEOrdersReceivedCurrentQuarter

WHERE 
CASE WHEN AEOrdersReceivedCurrentQuarter.`Product Type` = 'Studio Services' THEN 'Studio Services'
CASE WHEN AEOrdersReceivedCurrentQuarter.`Product Description` IN ('Artwork Charge','Creative Services','Creative Agency','Studio Services') THEN 'Studio Services'
ELSE ' '
End
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
214
1

Ответы 1

Не очень понятно, что вы спрашиваете. Вы хотите как-то ограничить записи с помощью оператора IF?

case, вероятно, будет выглядеть так:

where case 
        when PT='SS' then 'S'
        when PD in ('AC', 'CS', 'CA') then 'S'
        else ' '
      end  = 'S'

Я пытаюсь ограничить записи. Я прошу его сделать, если в первом столбце (PT) указано SS, а затем S, но если первый столбец не SS, то посмотрите на второй столбец (PD) и найдите 1 2 3 и верните его также как S

Jack Williams 26.02.2019 11:17

Я поменял порядок case и думаю, что он сделает то, что вам нужно. Вы можете использовать это в предложении where.

Sean 26.02.2019 11:21

Здравствуйте, Шон, извините, потому что у меня нет доступа к SQL-менеджеру, и я получаю откат от Excel по заявлению. Я вытащу полное заявление, поскольку оно не отредактировано выше, чтобы вы могли видеть, где что-то идет не так.

Jack Williams 26.02.2019 11:36

Я замечаю две вещи неправильно. Вы не ставите CASE перед каждым WHEN только один в начале - как это сделал я. Это все одно выражение от CASE до END. Во-вторых, CASE — это выражение, поэтому оно возвращает значение. Вам нужно будет проверить, равно ли это значение чему-то другому. Я обновлю свой ответ, чтобы попытаться показать, что я имею в виду.

Sean 26.02.2019 11:44

Итак, поскольку оператор CASE возвращает значение, означает ли это, что, вероятно, лучше установить его в операторе select, а затем отобразить ответ в другом столбце с именем «результат»? а затем в моем предложении where я могу сказать, где результат = студия

Jack Williams 26.02.2019 12:44

Да, звучит лучше. На самом деле вы могли бы сделать предложение WHERE без CASE в любом случае. что-то вроде where (PT='SS' OR PD IN ('AC', 'CS', 'CA')) может быть более интуитивно понятным.

Sean 26.02.2019 13:45

Я пробовал, где (PT = 'SS' ИЛИ ​​PD IN ('AC', 'CS', 'CA')) но, к сожалению, это ограничивает отображение только PD 'AC', 'CS', 'CA', а не оба

Jack Williams 26.02.2019 15:50

Другие вопросы по теме