SQL Server中创建电子邮件
的报告我有一个叫SpeakerSessions
表包含这些列: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
如何在SQL Server中实现此目的? ID
列是标识列。同一位发言者可以在会议的多个会议上发言。
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 ''
而不是缺省空值返回空字符串。
许多报告工具都有一个“抑制重复值”选项来处理您的逻辑。在Excel中执行此操作也很容易,如果您要将数据提取到电子表格中,则该公式会查看以前的单元格。
哇,这几乎是我正在寻找的!我必须通过电子邮件而不是发言人名称来订购,因为空值首先出现。但是,当我运行这个时,应该不会有重复。每个演讲者出现一次,但有重复的会议会议fbdue – z0nia
@ z0nia此查询无法引入尚未存在于数据中的重复项。我想有些行可能会出现成为dups,但他们必须从预期的顺序中进行洗牌。没有看到数据就很难做出猜测。也许'row_number()'不匹配最后的'order by'。 – shawnt00
在SpeakerSessions表中,有一位发言者A在一次会议上发言,只进行一次会议。查询结果显示speakerA - confA - sessionA - fbdue。直接在该行之下的行显示除了发言者为空之外的完全相同的东西:null -confA - sessionA - fbdue – z0nia
你在寻找扬声器行只出现一次,没有多个乔和艾米的? – Zi0n1
@ Zi0n1是的!究竟。演讲者出现一次,然后让他们的会议和会话出现在同一行,以及之后需要多少行。 – z0nia
这是一个简单的'select'。你甚至试图为自己做这件事吗? – shawnt00