Подтвердить что ты не робот

SQL Server. Присоедините две таблицы к виду, возьмите строки из одного и перейдите в столбцы

Я новичок в SQL Server, поэтому не знаю, что я делаю с этим. У меня есть две таблицы, которые могут выглядеть так:

таблица 1

------------------------------
| ID | customer |    Date    | 
------------------------------
| 1  | company1 | 01/08/2014 | 
------------------------------
| 2  | company2 | 10/08/2014 |
------------------------------
| 3  | company3 | 25/08/2014 |
------------------------------

таблица 2

-------------------------
| ID | Status   | Days  |
-------------------------
| 1  |   New    |    6  |
-------------------------
| 1  | In Work  |   25  |
-------------------------
| 2  |   New    |   17  |
-------------------------
| 3  |   New    |   14  |
------------------------
| 3  | In Work  |   72  |
-------------------------
| 3  | Complete |   25  |
-------------------------

Что мне нужно сделать, так это объединение на основе идентификатора и создание новых столбцов, чтобы показать, сколько времени каждый идентификатор был в каждом статусе. Каждый раз, когда заказ переходит к новому статусу, добавляется новая строка, и количество дней считается как во второй таблице выше. То, что мне нужно создать из этого, должно выглядеть так:

---------------------------------------------------------
| 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    |
---------------------------------------------------------

Итак, что мне нужно для создания этого?

Спасибо за любую помощь, поскольку я говорю, что я довольно новичок в этом.


Я бы предположил, что ссылка AHiggins - лучший кандидат, чтобы отметить это как обман, а не тот, который был выбран, потому что его ссылка включает в себя соединение.

4b9b3361

Ответ 1

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
;