如何计算列别名的总和" Performance_Indicators"。 我想总计Performance_Indicator的总和。 我不能使用SUM(Performance_Indicators)。
SELECT a.username
,a.name
,a.description
,a.action_header
,a.remarks
,e.complexity
,datediff(DAY, e.entry_date, a.datetime_stamp) as [man-days]
,CASE
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
= 0 THEN '1'
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 29 THEN '2'
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 14 THEN '3'
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 8 THEN '4'
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
<= 7 THEN '5'
ELSE '1'
END AS Performance_Indicators,
SUM(Performance_Indicators) as total
from [s].[dbo].[tbl_de] a
left join
[s].[dbo].[tbl_ce] e
on a.reference_code = e.reference_code
order by a.name asc
答案 0 :(得分:1)
更改CASE语句以生成整数而不是字符串,然后使用SUM(CASE ... END)作为Performance_Indicators。
答案 1 :(得分:1)
试试这个:
SELECT a.username
,a.name
,a.description
,a.action_header
,a.remarks
,e.complexity
,datediff(DAY, e.entry_date, a.datetime_stamp) as [man-days]
,SUM(CASE
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
= 0 THEN 1
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 29 THEN 2
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 14 THEN 3
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 8 THEN 4
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
<= 7 THEN 5
ELSE 1
END) AS total
from [s].[dbo].[tbl_de] a
left join
[s].[dbo].[tbl_ce] e
on a.reference_code = e.reference_code
GROUP BY a.username
,a.name
,a.description
,a.action_header
,a.remarks
,e.complexity
,datediff(DAY, e.entry_date, a.datetime_stamp)
order by a.name asc
答案 2 :(得分:1)
要实现这一点,你应该在第一个句子上进行子查询,然后进行主要查询以求它。
试试这个
WITH CTE AS
(
SELECT a.username
,a.name
,a.description
,a.action_header
,a.remarks
,e.complexity
,datediff(DAY, e.entry_date, a.datetime_stamp) as [man-days]
,CASE
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
= 0 THEN 1
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 29 THEN 2
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 14 THEN 3
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 8 THEN 4
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
<= 7 THEN 5
ELSE 1
END AS PerformanceIndicator
from [s].[dbo].[tbl_de] a
left join
[s].[dbo].[tbl_ce] e
on a.reference_code = e.reference_code
)
SELECT a.username
,a.name
,a.description
,a.action_header
,a.remarks
,e.complexity
,datediff(DAY, e.entry_date, a.datetime_stamp) as [man-days]
,cte.PerformanceIndicator
,SUM(CASE
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
= 0 THEN 1
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 29 THEN 2
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 14 THEN 3
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
>= 8 THEN 4
WHEN e.complexity = 'Simple' AND datediff(DAY, e.entry_date, a.datetime_stamp)
<= 7 THEN 5
ELSE 1
END) AS total
from [s].[dbo].[tbl_de] a
left join [s].[dbo].[tbl_ce] e on a.reference_code = e.reference_code
inner join cte on cte.name = a.name and cte.description = a.description
GROUP BY a.username
,a.name
,a.description
,a.action_header
,a.remarks
,e.complexity
,datediff(DAY, e.entry_date, a.datetime_stamp)
,cte.PerformanceIndicator
order by a.name asc