Я работаю над этим кодом, но я продолжаю получать неверный идентификатор для t2.nabp_num.
`with t1 as (query1),
t2 as (query2)
Select t1.*, t2.device_count,
d.* from t1
inner join t2 on
t1.nabp_num = t2.nabp_num and
t1.dt = t2.dt and
t1.d_member = t2.d_member
inner join drug_product d on
t1.d_product_id = d.product_id
order by claim_count desc;`
я получаю неверный идентификатор
Нам нужно будет увидеть DDL всех включенных структур таблиц, образцы данных, запрос, который вы попробовали (предоставили), и ожидаемые результаты. В противном случае у нас есть неполная информация, чтобы помочь.
Как уже отмечалось, вы не можете ссылаться на то, чего не существует.
Это, безусловно, помогло бы, если бы вы отправили фактический запрос вместо недействительного
with t1 as (query1 --> what is "query1"?
Order by ...
В любом случае: как NABP_NUM
упоминается здесь:
inner join t2 on t1.nabp_num = t2.nabp_num
это означает, что он должен быть частью как t1
, так и t2
. Однако, поскольку результат t2
CTE получен из t1
, возможно, вам вообще не нужен t1
...
Если вы добавите все столбцы, которые в настоящее время отсутствуют либо в списке столбцов select
, либо в предложении group by
, запрос будет выглядеть так (см. комментарии в коде):
WITH
t1
AS
(SELECT d_member_id,
dt,
device_type,
claim_id,
nabp_num, --> add NABP_NUM
d_member_hq_id --> add D_MEMBER_HQ_ID
d_drug_product_id --> add D_DRUG_PRODUCT_ID
FROM some_table --> which table?
), --> remove ORDER BY, it is useless here
t2
AS
( SELECT d_member_id,
dt,
nabp_num, --> add NABP_NUM
d_member_hq_id, --> add D_MEMBER_HQ_ID
COUNT (DISTINCT device_type) AS device_count,
COUNT (DISTINCT claim_ID) AS claim_count
FROM t1
GROUP BY d_member_id, dt, nabp_num, d_member_hq_id) --> add NABP_NUM and D_MEMBER_HQ_ID
SELECT t1.*, t2.device_count, d.*
FROM t1
INNER JOIN t2
ON t1.nabp_num = t2.nabp_num
AND t1.dt = t2.dt
AND t1.d_member_hq_id = t2.d_member_hq_id
INNER JOIN vmd_drug_product d
ON t1.d_drug_product_id = d.d_drug_product_id
ORDER BY t2.claim_count DESC;
Несмотря на то, что это больше не должно возвращать никаких синтаксических ошибок (предполагая, что используемые здесь столбцы действительно существуют в some_table
), я не могу сказать, вернет ли это или не вернет желаемый результат.
Избавьтесь от запятой после t1
d.* from t1,
s/bd.* from t1
, как будто вы выполняете перекрестное соединение и внутреннее соединение вместе. компилятор запутался, поэтому t2 не существует. Также: вы определяете t2 CTE с 4 полями. nabp_num не входит в их число (как и fill_Dt); и вы не используете псевдоним одного из ваших счетчиков, на который становится некрасиво ссылаться позже ... Очень странно, может быть, вместо таких счетчиков вам следует использовать оконную функцию?