下面的查询有时会起作用。MS Access查询性能问题
通常的问题是,当我运行查询时,它不会显示超过180年的那些记录的记录数,尽管它确实显示了所有其他数据。
l_section & dim_performance_score是SharePoint 2010列表。
我想报告显示,不到90天的记录,> = 90和<期180日龄,以及> = 180天。
如果我创建五个不同的存储查询并将它们留在一起,则查询将一致地工作。但是,当我将所有SQL整合到一个存储查询中时,事情就会变得很糟糕。不承担性能问题,如果我尝试查看设计窗口中的合并查询,MS Access崩溃。这是JET的一个已知问题吗?
要维护5个或6个不同的查询来获得一个答案似乎效率低下。
是我正在做的最好的方式去获得所需的数据?
PARAMETERS [compare date] DateTime;
SELECT
l_section.section,
[compare date] AS [As of Date],
total_count.[Total Records],
IIf([less_than_90].[<90 Days] Is Null,0,[less_than_90].[<90 Days]) AS [<90 Days],
IIf([greater_than_90].[>=90 & <180Days] Is Null,0,[greater_than_90].[>=90 & <180Days]) AS [>=90 & <180Days],
IIf([greater_than_180].[>=180 Days] Is Null,0,[greater_than_180].[>=180 Days]) AS [>=180 Days]
FROM
(
(
(
l_section
LEFT JOIN
(
SELECT
since_modified.section,
Count(since_modified.section) AS [>=180 Days]
FROM
(
SELECT
l_section.section,
IIf(dim_performance_score.[Modified] Is Null,0,DateDiff("d",dim_performance_score.[Modified],[compare date])) AS days_since_update
FROM
l_section
LEFT JOIN
dim_performance_score
ON
l_section.section = dim_performance_score.section
) as since_modified
WHERE
(((since_modified.days_since_update)>=180))
GROUP BY
since_modified.section
) as greater_than_180
ON
l_section.section = greater_than_180.section
)
LEFT JOIN
(
SELECT
since_modified.section,
Count(since_modified.section) AS [<90 Days]
FROM
(
SELECT
l_section.section,
IIf(dim_performance_score.[Modified] Is Null,0,DateDiff("d",dim_performance_score.[Modified],[compare date])) AS days_since_update
FROM
l_section
LEFT JOIN
dim_performance_score
ON
l_section.section = dim_performance_score.section
) as since_modified
WHERE
(((since_modified.days_since_update)<90))
GROUP BY
since_modified.section
) as less_than_90
ON
l_section.section = less_than_90.section
)
LEFT JOIN
(
SELECT
since_modified.section,
Count(since_modified.section) AS [>=90 & <180Days]
FROM
(
SELECT
l_section.section,
IIf(dim_performance_score.[Modified] Is Null,0,DateDiff("d",dim_performance_score.[Modified],[compare date])) AS days_since_update
FROM
l_section
LEFT JOIN
dim_performance_score
ON
l_section.section = dim_performance_score.section
) as since_modified
WHERE
(((since_modified.days_since_update)>=90
And
(since_modified.days_since_update)<180))
GROUP BY
since_modified.section
) as greater_than_90
ON
l_section.section = greater_than_90.section
)
LEFT JOIN
(
SELECT
l_section.section,
Count(IIf([section] Is Null,0,[section])) AS [Total Records]
FROM
l_section
LEFT JOIN
dim_performance_score
ON
l_section.section = dim_performance_score.section
GROUP BY l_section.section
) as total_count
ON
l_section.section = total_count.section
ORDER BY l_section.section;
语法错误(缺少运营商)JOIN( SELECT since_modified.section, 计数(since_modified.section)AS [<90天] FROM (” –
我觉得每个连接是在同一水平,需要有用于转换成零l_section和空每个部分的记录。 –
尝试每次添加一个部分和注释掉休息。我无法看到数据所以我只能猜测,但在结构上是我写的是健全的。所以,只有第一个“LEFT JOIN”部分尝试一下,看看会发生什么。如果这样的作品,加上下一LEFT JOIN等Ø ñ。 –