SQL Server创建电子邮件报告

时间:2016-08-19 16:53:52

标签: sql sql-server

我有一个名为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列是标识列。同一位发言者可以在会议的多个会议上发言。

1 个答案:

答案 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中使用一个查看上一个单元格的公式也很容易。