Я думаю, что ошибка в том, что вы описываете поле (т. Е. Столбец результата) для запроса, как и другие: DMAGATR.WRK_LOC_LEVEL4, DMBR.WRK_LOC_NM, DMBR.RELCD, COUNT (DISTINCT DMBR.DMBRKEY ...
Я думаю, что ошибка в том, что при использовании оператора SQL-Select для результирующей COLUMN он должен возвращать только одну строку. Так как ваш запрос просто "... FROM DMBR) как CMPN", вы возвращаете болееодна строка для поля, и база данных не знает, как угадать ваш результат.
Возможно, вам не хватает как предложения WHERE для поля, так и, возможно, GROUP, если вы ищете другое значение изнутритаблица DMBR.
Исправьте это, и это должно продвинуть вас НАМНОГО дальше.Не зная остальной структуры данных или отношений, я не могу понять, каков будет ваш конечный результат.
ДОПОЛНИТЕЛЬНЫЙ КОММЕНТАРИЙ ...
Просматривая другие предоставленные ответыОни предложили немедленно выполнить СЛУЧАЙ КОГДА-ЛИБО на любой текущей записи «DMBR», которая была бы правильной, но не совсем работающей.Я думаю, что из-за двух возможных результатов, которые тоже должны быть частью группы по ... как подсчет (DISTINCT), группа должна быть основана на любых столбцах без агрегации ... из которых этот случай /когда было бы таковым ... Итак, ваш конечный результат будет иметь
Lvl, Work Loc, RelCD, Case/when, count(distinct) where...
SEG 1 999
Other 999
Кроме того, в вашем CASE / WHEN было два компонента, точно совпадающих с вашим предложением WHERE, поэтому я забрал его там, так как нет записей этого наборабыл бы возвращен в любом случае.
Итак, при всем этом, я бы написал это как ...
SELECT
DMAGATR.WRK_LOC_LEVEL4,
DMBR.WRK_LOC_NM,
DMBR.RELCD,
CASE WHEN (DMBR.WRK_LOC_NM = '6'
AND DMBR.GDR = 'M' )
THEN 'SEG 1'
ELSE 'OTHER'
END as WhenStatus,
COUNT (DISTINCT DMBR.DMBRKEY) AS ELIG_COUNT
FROM
DMBR
JOIN DCUST
ON DMBR.DCUSTKEY = DCUST.DCUSTKEY
JOIN DMAGATR
ON DMBR.DMBRKEY = DMAGATR.DMBRKEY
LEFT JOIN DMDYNATR
ON DMBR.DMBRKEY = DMDYNATR.DMBRKEY
WHERE
DMBR.C_TIMESSTAMP <= '12/31/2011'
AND DMBR.REL_CD in ('0','1')
AND DMBR.EE_STS IN ('A','L'))
AND DCUST.PRCD = 'TAR'
AND ( DMBR.DEL_DT IS NULL
OR DMBR.DEL_DT > '12/31/2011')
GROUP BY
DMAGATR.WRK_LOC_LEVEL4,
DMBR.WRK_LOC_NM,
D_MEMBER.REL_CD,
CASE WHEN (DMBR.WRK_LOC_NM = '6'
AND DMBR.GDR = 'M' )
THEN 'SEG 1'
ELSE 'OTHER'
END
Наконец, иногда я видел, как группа задохнетсяна сложном столбце, таком как случай / когда.Однако разные серверы допускают порядковый указатель на группу по (и по порядку) позициям.Таким образом, поскольку в запросе есть 4 неагрегированных столбца (все перечислены первыми), а затем число различных, вы МОЖЕТЕ иметь возможность изменить предложение GROUP BY на ...
GROUP BY 1,2, 3, 4
Все, что относится к последовательному порядку столбцов. НАЧИНАЕТ вызов SQL-Select.
--- УТОЧНЕНИЕ о группировке и чувствительности к регистру
ПервыйЧувствительность к регистру, большинство двигателей чувствительны к регистру ключевых слов, поэтому CASE WHEN ... AND ... THEN ... ELSE ... END.
Что касается «group by» (и также работает для «order by»), это скорее ярлык к порядковым столбцам в вашем запросе, вместо того, чтобы явно перечислять им длинные имена и повторять- введите всю конструкцию CASE во второй раз, вы можете просто сообщить движку, какой столбец результирующего набора вы хотите заказать, посмотрев на следующий (не связанный) запрос ...
select
lastname,
firstname,
sum( orderAmount ) TotalOrders
from
customerOrders
group by
lastname,
firstname
order by
TotalOrders DESC
и
select
lastname,
firstname,
sum( orderAmount ) TotalOrders
from
customerOrders
group by
1,
2
order by
3 DESC
Каждый из них будет давать одинаковые результаты ... Вымышленная таблица customerOrders будет предварительно агрегирована по фамилии и имени и будет отображать общее количество на человека (все предполагают, что для этого примера нет повторяющихся имен, в противном случае,Я бы использовал идентификатор клиента).Как только это будет сделано, заказ сработает, и порядок продаж будет увеличен для данного покупателя в порядке убывания в верхней части списка.
Числа просто представляют порядковые столбцы, возвращаемые взапрос вместо длинного набора имен полей.Более подробно о проблеме «CASE / WHEN», которая у вас возникла, чтобы не допустить перепечатки упущений и пропуска их в группе, пытаясь понять, почему.