【发布时间】:2026-02-04 22:40:01
【问题描述】:
所以我正在尝试为员工人数报告构建一个数据模型,该模型允许用户选择他希望员工人数计算的内容(动态列)。我尝试查询下面的脚本(这只是一个示例,真正的脚本有几个计数和百分比)并且系统卡在处理中,就像它在循环中一样。我的值列表范围为 1-5。我还尝试制作一个固定的值列表,并将分组列的查询放在值中,这也造成了无休止的处理。有什么想法吗?
(SELECT test1.test1,
COUNT(DISTINCT id.personid)
FROM
table_identifiers id,
(SELECT DISTINCT
(CASE WHEN :P_COLUMN = 1 THEN te.ethnicities
WHEN :P_COLUMN = 2 THEN tc.companyname
ELSE NULL END) AS test1
FROM
table_ethnicities te,
table_companies tc
WHERE 1=1
) test1
GROUP BY test1.test1)
【问题讨论】:
-
除了笛卡尔连接,请注意逗号分隔的
FROM子句不鼓励使用,也不应使用,优先明确列出JOINs(并包括尽可能多的条件)在ON子句中使用JOIN,而不是作为WHERE的一部分)。您的部分问题也可能是按动态列分组 - 尽管优化器可能足够聪明以提升常量(需要分析)。否则,您会使用动态 SQL 获得更好的结果,但这更容易出错。 -
我知道,我这样做更多是为了稍微缩短我的查询并将它们保持在可管理的水平,以快速筛选和定位脚本片段的能力。不幸的是,我为一家大公司工作,该公司喜欢限制我对所有内容的访问,因此我必须在 oracle 提供的网络浏览器桌面上进行编程。即使我在单词上有一些颜色编码,也不要使用漂亮的程序,这会很好,或者是一种将数据隔开但没有的方法。所以我尽量保持简单。