将固定数量的行转置为SQL Server中的列

时间:2018-10-31 16:32:53

标签: sql sql-server pivot

我遇到以下问题。

我需要填充的表(假设Activities)具有3列(例如Act1, Act2, Act3),我需要在该表中排列客户在该记录上进行的最后3个活动

我成功创建了一个查询,该查询以降序提取了前3个活动(这是两个不同表的并集,因为活动可以是电子邮件或通用注释):

SELECT TOP 3 Concat(subject, ' | ', content, ' | ', creation) AS ActivityContent 
FROM   (SELECT TOP 3 'Email'             AS Tipo, 
                     a.regardingobjectid AS Regarding, 
                     a."subject"         AS "Subject", 
                     NULL                AS "Content", 
                     a.createdon         AS creation 
        FROM   mydb.dbo.activities a 
        WHERE  a.activitytypecode = 4202 
        UNION 
        SELECT TOP 3 'Note'        AS Tipo, 
                     ann.objectid  AS Regarding, 
                     ann."subject" AS "Subject", 
                     ann.notetext  AS "Content", 
                     ann.createdon AS creation 
        FROM   mydb.dbo.notes ann) AS Act 
ORDER  BY creation DESC 

这是我查询的结果:

enter image description here

我现在需要向Act1, Act2, Act3列报告3行的结果ActivityContent(这些行总是3,如果没有完成活动,则可能更少)。

+-----------------------------------------------+-----------------------------------------------+----------------------------+--+
|                     Col1                      |                     Col2                      |            Col3            |  |
+-----------------------------------------------+-----------------------------------------------+----------------------------+--+
| 'Test Nota' | 'Test Descrizione' | Oct 30 ... | 'Test Nota' | 'Test Descrizione' | Oct 30 ... | d |  | Oct 26 2018  9:23PM |  |
+-----------------------------------------------+-----------------------------------------------+----------------------------+--+

我要说的是,我一般并不真正熟悉SQL过程,但是我迷失在网上找到的大量功能中:

据我了解,PIVOT可能是合适的功能之一,但是当您需要在列中进行汇总(计数,总和)时,似乎必须使用PIVOT,而这并不是我的要求。

我也检查了APPLY,CROSS APPLY等,但我真的不明白必须使用的内容以及如何实现它。

预先感谢您的提示。

0 个答案:

没有答案