我的数据如下:
SampleID Result Qualifier A1 2 NULL A1 1 NULL B2 4 NULL B2 5 >
我想汇总(求和)结果,但要保留“最保守”的限定符。在这种情况下,'>'比'NULL'
更保守换句话说,这就是我想要的输出。
SampleID SumResult Qualifier A1 3 NULL B2 9 >
这可能吗?起初我以为我可以使用Case语句,但在线阅读表明不可能在多个记录中使用它们。
请注意,只有少数可能的'资格赛'。
SELECT
[SampleID]
,SUM([Result]) AS [SumResult]
--,CASE WHEN (One or more [qualifier] are '>', return '>', else return NULL) AS [Qualifier]
FROM [tblData]
GROUP BY
[Sample ID]
答案 0 :(得分:1)
您可以使用MAX
:
SELECT
[SampleID]
,SUM([Result]) AS [SumResult]
CASE MAX(CASE Qualifier
WHEN '*' THEN 1 WHEN 'ND' THEN 2 WHEN '>' THEN 3 END)
WHEN 1 THEN '*' WHEN 2 THEN 'ND' WHEN 3 THEN '>' END as Qualifier
FROM [tblData]
GROUP BY
[Sample ID]
当然,如果限定符实际上将您所需的排序顺序作为字符串,则您不需要使用CASE
表达式转换为整数或从整数转换为直接应用MAX
(或MIN
)。
对于少数限定符,您只需将此映射存储为整数/从整数存储为另一个表中的两列,并使用该映射而不是CASE
表达式。
答案 1 :(得分:0)
对于你想要的,max()
应该做到这一点:
SELECT [Sample ID], SUM([Result]) AS [SumResult], MAX(Qualifier) as Qualifier
FROM [tblData]
GROUP BY [Sample ID];