SQL Server。在一个视图中连接两个表,从一个表中取出行并转化为列。
SQL Server。在一个视图中连接两个表,从一个表中取出行并转化为列。
我对SQL Server还不太熟悉,所以对这个并不清楚。我有两个表,可能长这样:\n表1\n| ID | 客户 | 日期 | \n| 1 | 公司1 | 01/08/2014 | \n| 2 | 公司2 | 10/08/2014 |\n| 3 | 公司3 | 25/08/2014 |\n
\n表2\n| ID | 状态 | 天数 |\n| 1 | 新建 | 6 |\n| 1 | 进行中 | 25 |\n| 2 | 新建 | 17 |\n| 3 | 新建 | 14 |\n| 3 | 进行中 | 72 |\n| 3 | 完成 | 25 |\n
\n我需要根据ID进行连接,并创建新的列来显示每个ID在每种状态下的持续时间。每当订单进入新的状态时,都会添加一行,并且天数按照上述第二个表进行计算。我需要创建的结果应该是这样的:\n| ID | 客户 | 日期 | 新建 | 进行中 | 完成 |\n| 1 | 公司1 | 01/08/2014 | 6 | 25 | |\n| 2 | 公司2 | 10/08/2014 | 17 | | |\n| 3 | 公司3 | 25/08/2014 | 14 | 72 | 25 |\n
\n那么我需要做什么来创建这个结果呢?\n感谢任何帮助,我说过我对此还不太熟悉。
问题的原因是需要将一个表中的某些行转换为另一个表中的列,并将两个表连接在一起以创建一个视图。解决方法是使用SQL Server中的PIVOT功能。
首先,我们创建一个名为TimeTable的公用表表达式(CTE),从Table1和Table2中选择所需的列,并使用INNER JOIN将它们连接起来。这将创建一个包含所需行和列的临时表。
然后,我们使用PIVOT关键字来进行转置操作。在PIVOT子句中,我们指定要转置的列([Days]),以及它们对应的新列名([Status])。在这个例子中,我们将[New]、[Complete]和[In Work]作为新列名。
最后,我们从TimeTable视图中选择所有的列。这将生成一个包含将Table2中的行转换为列的结果集的视图。
感谢Pavel的回答,我已经根据AHiggins在我的问题中的评论得到了答案,但由于这个回答是具体和清晰的,所以我将把它标记为答案。谢谢!