【发布时间】:2017-02-23 04:18:17
【问题描述】:
我在 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 ;
【问题讨论】:
-
group by sum(..)完全没有意义。在 Oracle 和 SQL Server 中都没有。你的DATEFROMPARTS到底在做什么? Oracle 中没有year()函数。你自己写的吗?rownum < 5的意图是什么?这就是not going to work 你的想法。请在您的问题中添加确切错误消息。 -
无论您使用哪种 DBMS,都应该使用 ANSI-92 样式的连接。自推出以来已超过 25 年。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…
-
查询不可能像 sql server 中发布的那样工作。您在 group by 中有聚合,并且在 group by 中也有列别名。您是否考虑过转换为日期而不是所有那些将日期时间转换为日期的函数?
-
同时从
GROUP BY子句中删除列别名 (as MD)。group by子句应该不是select子句的剪切粘贴! -
datefromparts 函数可以简化为这个。转换(日期,getdate())
标签: sql oracle oracle11g database-migration