SQL Server.加入两个表na视图,从一个行中取行并转换为列

min*_*003 20 sql-server join

我是SQL Server的新手,所以不知道我在做什么.我有两个表,可能看起来像这样:

表格1

| ID | customer |    Date    | 
| 1  | company1 | 01/08/2014 | 
| 2  | company2 | 10/08/2014 |
| 3  | company3 | 25/08/2014 |
Run Code Online (Sandbox Code Playgroud)

表2

| ID | Status   | Days  |
| 1  |   New    |    6  |
| 1  | In Work  |   25  |
| 2  |   New    |   17  |
| 3  |   New    |   14  |
| 3  | In Work  |   72  |
| 3  | Complete |   25  |
Run Code Online (Sandbox Code Playgroud)

我需要做的是根据ID加入,并创建新列以显示每个ID在每个状态中的持续时间.每次订单进入新状态时,都会添加一个新行,并计算天数,如上面第二个表中所示.我需要从中创建的内容应该如下所示:

| ID | customer |    Date    | New | In Work | Complete |
| 1  | company1 | 01/08/2014 |  6  |    25   |          |
| 2  | company2 | 10/08/2014 |  17 |         |          |
| 3  | company3 | 25/08/2014 |  14 |    72   |    25    |
Run Code Online (Sandbox Code Playgroud)

那么我需要创建这个呢?

感谢您的帮助,正如我所说,我对此很陌生.


我建议,AHiggins的链接是一个更好的候选者,可以将其标记为欺骗而不是实际被选中的那个,因为他的链接涉及联接.

Pav*_*dov 2

WITH [TimeTable] AS (
   SELECT
      T1.ID,
      T1.[Date],
      T2.[Status] AS [Status],
      T2.[Days]
   FROM
      dbo.Table1 T1
   INNER JOIN dbo.Table2 T2
      ON T2.ID = T1.ID
)

SELECT *
FROM
   [TimeTable]
   PIVOT (MAX([Days]) FOR [Status] IN ([New], [Complete], [In Work])) TT
;
Run Code Online (Sandbox Code Playgroud)