试试这个:
Select Name, Min (Case When tag = 'A' Then Tag End) A, Min (Case When tag = 'B' Then Tag End) B, Min (Case When tag = 'C' Then Tag End) C, email From tableName Group By Name, email
编辑:解释…每次
使用a时
GroupBy,您都在告诉查询处理器您希望它将结果聚合到“存储桶”中,其中每个存储桶由组中定义的列[或表达式]中的唯一值定义按子句。这意味着对于分组依据中定义的那些列[或表达式]中的每个唯一值集,最终结果集将只有一行,并且只有一行。查询中使用的所有其他列或表达式(“分组
依据”中 定义的列或表达式除外) 必须是基于聚合函数的表达式 (例如Count(),Sum(),Avg(),Min(),Max(
)等),它们会根据计算产生一个值,该值将应用于预汇总结果集中的所有行。例如,如果我要
Group By姓氏的第一个字符:
Select Left(LastName, 1), Count(*), Sum(Salaray, Avg(Height), Min(DateOfBirth), etc. From Table Group By Left(LastName, 1)
那么我最多将在输出中获得26行(每个字母对应一个字母),而我的输出中的所有其他列必须基于某种聚合函数,才能应用于姓氏开头的原始集中的所有行以“
A”开头,则姓氏以“ a”开头的所有行均以“ B”开头,依此类推。
在您的问题中,“分组依据”仅用于将输出集限制为每个不同的用户和电子邮件仅一行。完成此操作后,每行将只有一行。Select语句中的其他列需要有
Min()[[
Max()也将同样起作用),仅是为了满足上面
粗体斜体中 提到的语法要求。 ,则集合中将只有一个非空行,因此仅出于语法要求而采用Min()或Max()是必要的…



