SQL 查询查看
SQL Query to View
我正在尝试将以下查询转换为视图,但是我收到以下执行错误:
谁能指出我哪里出错了?
应该看起来像:
Financial Year VOLUME # Cases 5mins # Cases 10mins # Cases 15mins # Cases 20mins
2014/15 1490200 1029 6732 10163 11798
2015/16 1548700 1143 7286 10693 12338
etc...
代码:
SELECT t1.[Financial Year], t1.[VOLUME], t2.[# Cases 5mins], t3.[# Cases 10mins], t4.[# Cases 15mins], t5.[# Cases 20mins]
FROM
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) *100 as 'VOLUME' FROM tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t1
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 5mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 5 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t2
ON (t1.[Financial Year] = t2.[Financial Year])
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 10mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 10 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t3
on (t1.[Financial Year] = t3.[Financial Year])
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 15mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 15 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t4
on (t1.[Financial Year] = t4.[Financial Year])
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 20mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 20 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t5
on (t1.[Financial Year] = t5.[Financial Year])
我不确定为什么您的代码无法正常工作。但是使用条件聚合可以大大简化它,然后它可能会起作用:
SELECT [Financial Year],
COUNT(*) * 100 as VOLUME,
SUM(CASE WHEN CAST([ Response Time ] AS DECIMAL(9, 2)) / 60 <= 5 THEN 1 ELSE 0 END) as within_5_minutes,
SUM(CASE WHEN CAST([ Response Time ] AS DECIMAL(9, 2)) / 60 <= 10 THEN 1 ELSE 0 END) as within_10_minutes,
. . .
FROM tblCAD
WHERE [AO-NonPublicEvent] = 1 AND
[Reporting Exclusions] = 0 AND
[Reporting Priority] = '1'
GROUP BY [Financial Year];
请注意,您应该修正您的列名,这样它们就不需要转义了。我会建议 Fiscal_Year
、AO_NonPublic_Event
、Reporting_Exclusions
等。
我也不确定您为什么要将第一个计数乘以 100。以上假设 [Event Number]
不是 NULL
。如果是这种情况,那么您需要考虑到这一点。
我正在尝试将以下查询转换为视图,但是我收到以下执行错误:
谁能指出我哪里出错了?
应该看起来像:
Financial Year VOLUME # Cases 5mins # Cases 10mins # Cases 15mins # Cases 20mins
2014/15 1490200 1029 6732 10163 11798
2015/16 1548700 1143 7286 10693 12338
etc...
代码:
SELECT t1.[Financial Year], t1.[VOLUME], t2.[# Cases 5mins], t3.[# Cases 10mins], t4.[# Cases 15mins], t5.[# Cases 20mins]
FROM
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) *100 as 'VOLUME' FROM tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t1
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 5mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 5 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t2
ON (t1.[Financial Year] = t2.[Financial Year])
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 10mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 10 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t3
on (t1.[Financial Year] = t3.[Financial Year])
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 15mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 15 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t4
on (t1.[Financial Year] = t4.[Financial Year])
left join
(SELECT [Financial Year], CAST(COUNT([Event Number]) AS DECIMAL) as '# Cases 20mins' from tblCAD
WHERE [AO-NonPublicEvent] = 1 AND [Reporting Exclusions] = 0 AND CAST([Response Time] AS DECIMAL(9,2))/60 <= 20 AND [Reporting Priority] = '1'
GROUP BY [Financial Year]) t5
on (t1.[Financial Year] = t5.[Financial Year])
我不确定为什么您的代码无法正常工作。但是使用条件聚合可以大大简化它,然后它可能会起作用:
SELECT [Financial Year],
COUNT(*) * 100 as VOLUME,
SUM(CASE WHEN CAST([ Response Time ] AS DECIMAL(9, 2)) / 60 <= 5 THEN 1 ELSE 0 END) as within_5_minutes,
SUM(CASE WHEN CAST([ Response Time ] AS DECIMAL(9, 2)) / 60 <= 10 THEN 1 ELSE 0 END) as within_10_minutes,
. . .
FROM tblCAD
WHERE [AO-NonPublicEvent] = 1 AND
[Reporting Exclusions] = 0 AND
[Reporting Priority] = '1'
GROUP BY [Financial Year];
请注意,您应该修正您的列名,这样它们就不需要转义了。我会建议 Fiscal_Year
、AO_NonPublic_Event
、Reporting_Exclusions
等。
我也不确定您为什么要将第一个计数乘以 100。以上假设 [Event Number]
不是 NULL
。如果是这种情况,那么您需要考虑到这一点。