我将SAS脚本转换为Python,其中SAS脚本与Oracle数据库连接,而Python将与PostgreSQL数据库连接。在SAS代码中,我发现以下语句:
proc sql noprint;
create table table_name as
select distinct wtn
from another_table
where account = .
;
Run Code Online (Sandbox Code Playgroud)
什么是“ where account =”。在Oracle中是什么意思?还是不是Oracle SQL,而是SAS?还是在所有形式的SQL中都可用?
此外,如果特定于SAS和/或Oracle,那么我将在PostgreSQL中使用什么呢?
我有这个巨大的 SQL 语句,来自 Oracle+SAS 环境。我明白了大部分内容,但最让我困惑的是 WHERE 子句中的左外连接/加号。我需要将其转换为 Postgres。我可以处理代码的第一部分,这是让我困惑的连接。
SELECT
--A bunch of columns from several tables
FROM prd_acct_cmp_grp pacg,
product_acct pa,
customer_acct ca,
(SELECT DISTINCT member_id, group_id
FROM group_members
WHERE group_id IN (33158, 27156, 35376, 36217)) gm,
prd_acct_acct_cmp pac,
pacg_usage pu,
sales_hierarchy sh,
sales_region sr
WHERE pacg.component_group_cd = 'AN'
AND pacg.component_grp_val IN (%s) --string that is added in later
AND pacg.product_account_id = pa.product_account_id
AND pa.customer_acct_id = ca.customer_acct_id
AND ca.customer_acct_id = gm.member_id(+)
AND pacg.product_account_id = pac.product_account_id
AND pacg.occurencce_number = pac.occurence_number
AND …Run Code Online (Sandbox Code Playgroud) 我有一个查询,它是用 Oracle 编写的一个更大查询的一部分,我需要将其转换为 PostgreSQL。
/*rn and cnt are defined earlier*/
SELECT wtn, LTRIM(SYS_CONNECT_BY_PATH(RESP_TCSI, ','),',') TCSI_CODES
FROM DATA
WHERE rn = cnt
START WITH rn = 1
CONNECT BY PRIOR rn = rn-1
AND PRIOR WTN = WTN
Run Code Online (Sandbox Code Playgroud)
据我所知,SYS_CONNECT_BY_PATH()Postgres 中没有类似的东西。我知道 PostgresCONNECTBY()在 tablefunc 中有一个函数,但我不认为它执行 start with 和 connect by bits 的功能。我也知道 Postgres 相当于什么LTRIM(),但如果我必须使用CONNECTBY()或类似的东西,我不确定修剪字符串是否重要。
阅读和搜索周围我注意到可能有一种方法可以通过一些递归选择来做到这一点,但我不确定我将如何做到这一点,除此之外,我真的不明白代码在做什么。我的假设是它与基于 Oracle 等效项的分层树有关,但即便如此我也不确定。我如何在 Postgres 中做与此等效或类似的事情?
谢谢。