我正在查询报告,我需要帮助INNER JOIN,我一直在努力工作数周。它除了一个更大的报告查询,但我需要帮助在这个最后部分taht应该过滤某些结果。
cwo_work_order_line_item
中的每一行代表按交易顺序组合在一起的特定工单的项目。此查询正在加入此报告和cat_cust_item_acct_activity
的另一个表。该表显示了处理某个帐户的不同交易。
报告的某些部分应该只显示收费为“估算”的项目。此查询完全正常,直到某个项目更改为与其设置时不同的事务的实际价格。
问题是表cwo_work_order_line_item
使用不同的事务序列(trans_seq列)获取插入其中的新项目,cat_cust_item_acct_activity
也获取新项目。发生这种情况而不是实际修改表示每个表的项目的原始行。
这意味着即使价格从估算更改为实际,报表仍显示报表上的原始项目(设置项目)。
这是我数据库中两个表的图片。看到这个将有助于我更好地解释问题
http://i.imgur.com/SdcVG6V.png
在图片的示例中,第一个表是cwo_work_order_line_item
。 trans_seq 1052833是设置项目时的tranasction。查询仅检查这些项目是否设置为“ACTUAL”而不是“ESTIMATE”的价格,该价格在price_status_enum列中表示。
第3行显示不同的交易1052834,其中客户将商品价格更改为实际价格,因此为“ACTUAL”。
在第二个表cat_cust_item_acct_activity
中,您可以看到客户完成的操作。看似连接第一个和第二个表中的项目的唯一事情是第一个表中的rtrans_lineitm_seq
和第二个表中的cust_item_acct_detail_item_nbr
。
所以这就是我认为我需要做的事情:
我需要进行此查询以检查第二个表,以查看item_acct_activity_code
中是否存在“MODIFY_PRICE”,然后检索该行的cust_item_acct_detail_item_nbr
。然后确保第一个表中的行没有连接到cust_item_acct_detail_item_nbr
等于第一个表中rtrans_lineitm_seq
的位置
原始查询: 如果price_status_enum在设置时未在同一事务中更改或更改,则此查询有效。
SELECT
DISTINCT(ca.cust_acct_id)
FROM
cwo_work_order_acct ca
INNER JOIN
cat_cust_item_acct_activity acty
ON ca.organization_id = acty.organization_id
AND ca.cust_acct_id = acty.cust_acct_id
AND ca.cust_acct_code = acty.cust_acct_code
INNER JOIN
cwo_work_order_line_item cli
ON acty.organization_id = cli.organization_id
AND acty.wkstn_id = cli.wkstn_id
AND acty.trans_seq = cli.trans_seq
AND acty.business_date = cli.business_date
AND acty.rtl_loc_id = cli.rtl_loc_id
AND acty.rtrans_lineitm_seq = cli.rtrans_lineitm_seq
AND cli.price_status_enum ='ESTIMATE
答案 0 :(得分:0)
尝试使用子选择以获取最新的序列号,如下所示:
SELECT DISTINCT(ca.cust_acct_id)
FROM cwo_work_order_acct ca
INNER JOIN
(
SELECT
act.organization_id,
act.wkstn_id,
act.business_date,
act.rtl_loc_id,
act.rtrans_lineitm_seq,
max(act.trans_seq) trans_seq --Get the most recent seq number
FROM cat_cust_item_acct_activity act
GROUP BY
act.organization_id,
act.wkstn_id,
act.business_date,
act.rtl_loc_id,
act.rtrans_lineitm_seq
) as acty
ON ca.organization_id = acty.organization_id
AND ca.cust_acct_id = acty.cust_acct_id
AND ca.cust_acct_code = acty.cust_acct_code
INNER JOIN cwo_work_order_line_item cli
ON acty.organization_id = cli.organization_id
AND acty.wkstn_id = cli.wkstn_id
AND acty.trans_seq = cli.trans_seq
AND acty.business_date = cli.business_date
AND acty.rtl_loc_id = cli.rtl_loc_id
AND acty.rtrans_lineitm_seq = cli.rtrans_lineitm_seq
AND cli.price_status_enum ='ESTIMATE'