下面的查詢有時會起作用。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等Ø ñ。 –