У меня возникла небольшая проблема с переводом моего оператора 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


Не очень понятно, что вы спрашиваете. Вы хотите как-то ограничить записи с помощью оператора IF?
case, вероятно, будет выглядеть так:
where case
when PT='SS' then 'S'
when PD in ('AC', 'CS', 'CA') then 'S'
else ' '
end = 'S'
Я поменял порядок case и думаю, что он сделает то, что вам нужно. Вы можете использовать это в предложении where.
Здравствуйте, Шон, извините, потому что у меня нет доступа к SQL-менеджеру, и я получаю откат от Excel по заявлению. Я вытащу полное заявление, поскольку оно не отредактировано выше, чтобы вы могли видеть, где что-то идет не так.
Я замечаю две вещи неправильно. Вы не ставите CASE перед каждым WHEN только один в начале - как это сделал я. Это все одно выражение от CASE до END. Во-вторых, CASE — это выражение, поэтому оно возвращает значение. Вам нужно будет проверить, равно ли это значение чему-то другому. Я обновлю свой ответ, чтобы попытаться показать, что я имею в виду.
Итак, поскольку оператор CASE возвращает значение, означает ли это, что, вероятно, лучше установить его в операторе select, а затем отобразить ответ в другом столбце с именем «результат»? а затем в моем предложении where я могу сказать, где результат = студия
Да, звучит лучше. На самом деле вы могли бы сделать предложение WHERE без CASE в любом случае. что-то вроде where (PT='SS' OR PD IN ('AC', 'CS', 'CA')) может быть более интуитивно понятным.
Я пробовал, где (PT = 'SS' ИЛИ PD IN ('AC', 'CS', 'CA')) но, к сожалению, это ограничивает отображение только PD 'AC', 'CS', 'CA', а не оба
Я пытаюсь ограничить записи. Я прошу его сделать, если в первом столбце (PT) указано SS, а затем S, но если первый столбец не SS, то посмотрите на второй столбец (PD) и найдите 1 2 3 и верните его также как S