Преобразование различных столбцов в строки в SQL Server - PullRequest
0 голосов
/ 31 мая 2018

У меня есть данные в SQL Server, которые необходимо преобразовать из столбцов в строки.Теперь, хотя этот вопрос задавался довольно часто, я все еще сталкивался с некоторыми трудностями, и поэтому мне было интересно, может ли кто-нибудь мне помочь.

В настоящее время формат следующий:

enter image description here

Требуется формат таблицы, который будет очень полезен;

enter image description here

Таким образом, необходимо применять не только PIVOT, но я не уверен, какой синтаксис SQL-запроса поможет определить тип.Я пытался использовать CASE-WHEN с PIVOT, но это действительно дает правильный вывод.

С уважением!

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Попробуйте это

  ;WITH CTE2(ProjectName,[Plan Start Date],[Plan End Date],[Actual Start Date],[Actual End Date])
   AS
    (
    SELECT 'PR-A','1/1/2006','1/4/2006','1/4/2007','1/5/2008' UNION ALL
    SELECT 'PR-B','1/1/2007','1/1/2008','4/4/2008','6/6/2008' UNION ALL
    SELECT 'PR-C','1/1/2004','1/1/2008','2/5/2001','2/2/2008'
    )

   SELECT Projectname, 
       'Plan'            AS [Type], 
       [Plan start date] AS [Start Date], 
       [Plan end date]   AS [End Date] 
   FROM   Cte2 

   UNION ALL 

   SELECT Projectname, 
       'Actual' AS [Type], 
       [Actual start date], 
       [Actual end date] 
   FROM   Cte2 
   ORDER  BY Projectname, 
          [Type] DESC      

Демо: http://rextester.com/CQEBV76844

0 голосов
/ 31 мая 2018

Вы можете использовать запрос CROSS APPLY, как показано ниже

см. Рабочую демонстрацию

Select 
ProjectName,
v.*
from t
cross apply 
  (
   values 
    ('Plan',PlanStartDate,PlanEndDate),
    ('Actual',ActualStartDate, ActualEndDate)
  )v(type,StartDate, EndDate)
...