SQL查询需要很长时间才能返回数据
问题描述:
寻找一种更好的方式来编写这个查询,我的SQL技能并不是很好,基本上真的是在寻找任何使这个更好的指针。这只是前两列,完整的报告将有更多的10。SQL查询需要很长时间才能返回数据
我正在采取一组特定的修复类型,并使用计数和计算对它们进行分析。第一项是提供到本财政年度的工作,第二项是目前收到的工作总量。
SELECT
"Type",
(
SELECT
NVL (COUNT(jjo.jjobno), 0)
FROM
jjobh jjo
WHERE
jjo.jclcode = 'L'
AND jjo.jstatus <> '6'
AND jjo.year_rec <> (
SELECT
sub_code
FROM
code_table
WHERE
main_code = 'YEAR'
)
AND (
week_comp IS NULL
OR year_comp = (
SELECT
sub_code
FROM
code_table
WHERE
main_code = 'YEAR'
)
)
AND jjo.jrepair_type = "Type"
) AS "B/F",
(
SELECT
NVL (COUNT(jjo.jjobno), 0)
FROM
jjobh jjo
WHERE
jjo.jclcode = 'L'
AND jjo.jstatus <> '6'
AND jjo.year_rec = (
SELECT
sub_code
FROM
code_table
WHERE
main_code = 'YEAR'
)
AND jjo.jrepair_type = "Type"
) AS "Recvd"
FROM
(
SELECT
rep.repair_type_code AS "Type"
FROM
repair_type rep
WHERE
rep.client = 'L'
AND rep.work_centre = '004682'
ORDER BY
rep.repair_type_code
)
ORDER BY
"Type";
答
你的代码是一团糟。我怀疑你想要的东西,如:
SELECT jjo.jrepair_type, count(*) as valbf
FROM (SELECT coalesce(COUNT(jjo.jjobno), 0)
FROM jjobh jjo cross join
(SELECT sub_code
FROM code_table
WHERE main_code = 'YEAR'
) sc
WHERE jjo.jclcode = 'L' AND
jjo.jstatus <> '6' AND
jjo.year_rec <> sc.sub_code AND
(week_comp IS NULL OR
year_comp = sc.sub_code
)
) jjo join
(SELECT rep.repair_type_code AS "Type"
FROM repair_type rep
WHERE rep.client = 'L' AND
rep.work_centre = '004682'
) rtc
on jjo.jrepair_type = rtc.repair_type_code
group by jjo.jrepair_type;
它看起来像你想加入“jjo”表“修复类型代码”表,生产约每修复类型的信息。子查询中的顺序是无用的。
我的建议是将“jjo”表移动到外部的“from”。您还应该将WHERE子句移到最外面的WHERE子句中(我没有这样做)。我还没有弄清楚日期逻辑,但是这可能会让你走上正轨。
+0
戈登是的,这是正确的_“它看起来像你想加入”jjo“表”修复键入代码“表,生成关于每种修复类型的信息”_我会随着您的建议一起去,并让您知道。我现在开始意识到我的SQL技能有多弱。谢谢 – tookiebunten 2012-07-31 14:50:53
你可以看看的一件事是用连接替换你的许多子查询。这应该大大加快您的查询。 – Jacob 2012-07-31 10:26:50
谢谢,我会看看。 – tookiebunten 2012-07-31 10:50:01
表“code_table”是否有重复的条目 – shajivk 2012-07-31 11:05:38