[英]Converting TSQL query to Oracle not working
我在 SQL Server 中有一个运行良好的 tsql 查询。 但是当我在 ssis 中的执行 sql 任务中使用它来针对 Oracle DB 运行时。 我收到“组中不允许的功能”的错误。 我知道 Oracle 的分组是不同的,但我对它不够了解。
如何将此 tsql 查询转换为 oracle - sql:
SELECT
TBL_A.EID AS MYID
, TBL_A.ID
, TBL_B.LOGIN AS LOGID
, TO_DATE(TBL_B.CM, 'MM/DD/YYYY') as MD
, sum(TBL_B.CS) as TTS
, sum(TBL_B.COTS) as HTS
, sum(TBL_B.CWS) as WTS
, sum(TBL_B.CL) as NTS
FROM
SRVR1.TBL1 TBL_A JOIN
SRVR2.TBL2 TBL_B
ON TBL_A.ID = TBL_B.LOGIN
GROUP BY
TBL_A.EID
,TBL_A.ID
,TBL_B.LOGIN
,TO_DATE(TBL_B.CM, 'MM/DD/YYYY') as MD
ORDER BY TBL_B.LOGIN,
TBL_B.CM ;
我建议从这样的查询开始:
SELECT TBL_A.EID AS MYID, TBL_A.ID AS LOGID
DATEFROMPARTS(year(TBL_B.CM), month(TBL_B.CM), day(TBL_B.CM)) as MD
sum(TBL_B.CS) as TTS,
sum(TBL_B.COTS) as HTS,
sum(TBL_B.CWS) as WTS,
sum(TBL_B.CL) as NUM
FROM SRVR1.TBL1 TBL_A JOIN
SRVR2.TBL2 TBL_B
ON TBL_A.ID = TBL_B.LOGIN
WHERE rownum < 5
GROUP BY TBL_A.EID, TBL_A.ID, TBL_B.LOGIN,
DATEFROMPARTS(year(TBL_B.CM),month(TBL_B.CM),day(TBL_B.CM))
ORDER BY TBL_B.LOGIN, TBL_B.CM ;
笔记:
FROM
子句中使用逗号。 始终使用显式JOIN
语法。GROUP BY
放置像SUM()
这样的聚合函数。SELECT
有id
和login
? JOIN
条件指定它们相同。此外:
datefromparts()
是一个仅限 SQL Server 的函数year()
、 month()
和day()
仅适用于 SQL Serverrownum
仅适用于 OracleGROUP BY
之前的rownum
只返回 5 个任意行,然后聚合。我不确定您的查询应该是什么。 它在 SQL Server 和 Oracle 中看起来会有所不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.