【发布时间】:2017-03-06 20:34:38
【问题描述】:
我目前有一个类似这样的sql表
+---------+--------------+------------+
| Company | Contact Type | Start Time |
+---------+--------------+------------+
| x | Call | 01/01/2016 |
| x | Call | 02/01/2016 |
| x | Meeting | 02/01/2016 |
| x | Email | 03/01/2016 |
| y | Meeting | 01/01/2016 |
| y | Email | 01/02/2016 |
| y | Call | 02/02/2016 |
| z | Call | 09/01/2016 |
| z | Call | 24/01/2016 |
| z | Meeting | 10/01/2016 |
| z | Meeting | 06/01/2016 |
+---------+--------------+------------+
我想要生成一个表格,以下列格式显示最近的联系人类型:
+---------+------------+------------+------------+
| Company | Call | Meeting | Email |
+---------+------------+------------+------------+
| x | 02/01/2016 | 02/01/2016 | 03/01/2016 |
| y | 02/02/2016 | 01/01/2016 | 01/02/2016 |
| z | 24/01/2016 | 10/01/2016 | Null |
+---------+------------+------------+------------+
现在我可以在 SSRS 中让它看起来像这样,并将数据集转换为交叉表矩阵报告,但我想在 SQL 中生成它。我还设法通过使用大量子查询来实现这一点,但这似乎不是一种有效的方法,而且真正的表有数百万行和比呼叫、会议和电子邮件更多的联系人类型。所以问题是,产生第二个表的最有效方法是什么。为了论证起见,让我们说提取表 1 的 sql 代码是:
SELECT Company, [Contact Type], [Start Time] From Db.dbo.History
【问题讨论】:
-
仅供参考:所有日期的格式为 dd/mm/yyyy
-
列开始时间的数据类型?
标签: sql sql-server-2008 tsql