Из приведенного ниже sql я могу получить вывод как статус и AVG_PROD_COUNT.
Мой вопрос: когда account_num = 'A128' или 'A126', мне нужно использовать
"( dpc.product_id = cpp.product_id OR dpc.product_id = 999) ". Я попытался использовать статистику дел. Я новичок в sql, не могу получить вывод. Может любой, пожалуйста, помогите в этом.
Таблица cpp есть
Account_num
Pakage_id
Код товара
ВЫБЕРИТЕ средн. Статус,
SUM(avg.AVG_PROD_COUNT) AVG_PROD_COUNT
FROM
(SELECT
DECODE(dpc.product_id,999,'SUSPEND','ACTIVE') status,
dpc.product_id,
dpc.package_id,
ROUND(SUM(dpc.product_count)/ (to_date( '$billDate' ,'YYYYMMDD') - add_months(to_date( '$billDate' ,'YYYYMMDD'), -1)), 2) AVG_PROD_COUNT
FROM dailyproductcount dpc,
cust_pkg_prod cpp
WHERE dpc.rating_acct_nbr = cpp.account_num
AND dpc.rating_acct_nbr not in('A128','A126')
AND dpc.activity_dat BETWEEN add_months(to_date( '$billDate' ,'YYYYMMDD'), -1) AND to_date( '$billDate' ,'YYYYMMDD')-1
AND (dpc.product_id = cpp.package_id
OR dpc.product_id =999)
AND dpc.package_id = cpp.package_id
GROUP BY dpc.product_id,
dpc.package_id
) AVG
2 ответа
Приведенный выше sql не будет работать, потому что в родительском запросе нет "GROUP BY avg.status"
Насколько я понимаю, вам нужно что-то подобное в условии WHERE (я предполагаю, что вы используете Oracle):
...
ГДЕ dpc.rating_acct_nbr = cpp.account_num
И dpc.activity_dat МЕЖДУ add_months (to_date ('$ billDate', 'ГГГГММДД'), -1) И to_date ('$ billDate', 'ГГГГММДД') - 1
И dpc.package_id = cpp.package_id
И (dpc.product_id = 999 OR dpc.product_id = decode (dpc.rating_acct_nbr, 'A126', cpp.product_id, 'A128', cpp.product_id, cpp.package_id) )
...
Если вы хотите использовать CASE, условие
«product_id = decode (dpc.rating_acct_nbr, 'A126', cpp.product_id, 'A128', cpp.product_id, cpp.package_id) будет выглядеть так:
product_id = case when dpc.rating_acct_nbr in ('A126', 'A128') then cpp.product_id else cpp.package_id end
У вас ошибка в логике или, возможно, опечатка -
(dpc.product_id = cpp.package_id
OR dpc.product_id =999)
AND dpc.package_id = cpp.package_id
Функционально эквивалентно
dpc.package_id = cpp.package_id
Это препятствует тому, чтобы dpc.product_id =999
когда-либо заставляло ваше предложение where
оцениваться как истинное.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.