SQL内部联接和筛选结果
我正在查询一个报告,我需要帮助处理几个星期来一直在努力实现的内部连接。这是一个更大的报告查询的一部分,但在最后一部分我需要帮助taht应该过滤某些结果SQL内部联接和筛选结果,sql,database,Sql,Database,我正在查询一个报告,我需要帮助处理几个星期来一直在努力实现的内部连接。这是一个更大的报告查询的一部分,但在最后一部分我需要帮助taht应该过滤某些结果 cwo_工作单_行_项目中的每一行表示特定工作单上按交易顺序分组的项目。此查询正在将此表和另一个表合并为报表,cat\u cust\u item\u acct\u activity。该表显示了处理某个帐户的不同交易 报告的这个特定部分应该只显示作为“估算”收费的项目。在项目被更改为与设置时不同的交易的实际价格之前,此查询工作得非常好 问题在于,表
cwo_工作单_行_项目
中的每一行表示特定工作单上按交易顺序分组的项目。此查询正在将此表和另一个表合并为报表,cat\u cust\u item\u acct\u activity
。该表显示了处理某个帐户的不同交易
报告的这个特定部分应该只显示作为“估算”收费的项目。在项目被更改为与设置时不同的交易的实际价格之前,此查询工作得非常好
问题在于,表cwo\u work\u order\u line\u item
以不同的交易顺序(trans\u seq列)插入一个新项目,而cat\u cust\u item\u acct\u activity
也会获得一个新项目。这样做并不是实际修改每个表中表示项的原始行
这意味着,即使价格从估算更改为实际价格,报告仍在报告上显示原始项目(设置项目)
这是我数据库中两个表的图片。看到这一点将帮助我更好地解释这个问题
在图中的示例中,第一个表是cwo\u work\u order\u line\u item
。交易顺序1052833是项目设置时的交易。查询仅检查这些项目是否设置为“实际”价格而不是“估计”价格,这在“价格”列中表示
第三行显示一个不同的交易1052834,客户将商品价格更改为实际价格,因此为“实际”
在第二个表中,cat\u cust\u item\u acct\u activity
,您可以看到客户完成的操作。看起来唯一连接第一个表和第二个表中的项目的是第一个表中的rtrans\u lineitm\u seq
,第二个表中的cust\u item\u acct\u detail\u item\u nbr
这就是我认为我需要做的:
我需要进行此查询以检查第二个表,查看项目会计活动\u code
中是否存在“修改价格”,然后检索该行的客户项目会计明细\u项目\u nbr
。然后确保第一个表中的行未在cust\u item\u acct\u detail\u item\u nbr
与第一个表中的rtrans\u lineitm\u seq
相等的位置联接
原始查询:
如果价格\状态\枚举在设置时未更改或在同一事务中未更改,则此查询有效
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
尝试使用子选择以获取最新的序列号,如下所示:
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'