我有一个名为Created - datetime
Processed - float (boolean)
Dateprocessed - datetime
Conference - varchar
Session - varchar
FDBue - datetime
Speaker - varchar
Email - varchar
Type - varchar
ID - int
的表,其中包含以下列:
speaker conference session fbdue
-----------------------------------------------------
Joe Conf1 SessionA 1/1/2010
Conf1 SessionB 1/1/2010
Conf2 SessionE 1/10/2010
Amy Conf1 SessionA 1/3/2010
Conf2 SessionB 1/3/2010
我想要的是一个查询,报告或视图,它将向我展示演讲者所呈现的会话,以及演示内容的截止日期,类似于:
ID
如何在SQL Server中实现此目的? Unique/Primary key Exception
列是标识列。同一位发言者可以在会议的多个会议上发言。
答案 0 :(得分:0)
select
case
when row_number() over (
partition by coalesce(speaker, email)
order by conference, session
) = 1
then coalesce(speaker, email)
end as speaker,
conference, session, fbdue
from SpeakerSessions
order by coalesce(speaker, email), conference, session;
这个问题相当于知道哪一行是一系列行中的第一行。这种信息不能通过查看行本身来确定。
查看其他行基本上是分析/窗口功能的全部内容。 row_number()
是将编号应用于指定顺序的一组行的编号。 partition by
限制每个发言者的编号,并允许它在下一个发言人重置。 order by
也很重要,与查询结果的order by
非常匹配(speaker
之后)。
最终表达式说明了这一点:如果我们在第一行返回,则返回扬声器的名称,否则返回null(空白)。根据您打算如何使用它,您可能更愿意返回带有else ''
的空字符串,而不是默认的null。
许多报告工具都有一个"抑制重复值"为您处理此逻辑的选项。如果您将数据拖入电子表格,那么在Excel中使用一个查看上一个单元格的公式也很容易。