我有两列,我想不通过concat来合并两者,而只是将另一行下面合并

时间:2019-07-18 15:37:20

标签: sql sql-server database ssm

我在Sql表中得到了两列,分别为“下一个计划日期”和“预计的计划日期”。我想要的是将两列合并而不是仅将它们合并在另一行的下面。

我尝试了unPivot,但无法正常工作。任何建议请

选择[资产/位置],[部门名称],Future_Scheduled_Date 来自merge2_ernie 取消枢纽 ( Future_Scheduled_Date 中的[部门名称](从merge2_ernie中选择“不同的[部门名称]”) )

我的数据现在看起来像这样

**Department_Name**    **Next_Schedule_Date**   **Expected_Scheduled_Date**

Dept1                    Aug 2019             Sep 2019
Dept1                    Oct 2019             Nov 2019
Dept2                    Jan 2019             Mar 2019
Dept3                    Nov 2019             Jan 2020
Dept4                    Apr 2019             Sep 2019
Dept5                    Jun 2019             Jul 2019

我希望下面的数据是这样的

Department_Name    Future_Schedule_Date   

Dept1               Aug 2019            
Dept1               Sep 2019           
Dept1               Oct 2019          
Dept1               Nov 2019           
Dept2               Jan 2019
Dept2               Mar 2019
Dept3               Nov 2019
Dept3               Jan 2020
Dept4               Apr 2019             
Dept4               Sep 2019
Dept5               Jun 2019
Dept5               Jul 2019

2 个答案:

答案 0 :(得分:1)

您需要UNPIVOT而不是PIVOT

CREATE TABLE #dept
(
    dept VARCHAR(5),
    nextdate VARCHAR(10),
    expecteddate VARCHAR(10) 
)

INSERT INTO #dept(dept, nextdate, expecteddate)
VALUES
('Dept1','Aug 2019','Sep 2019'),
('Dept1','Oct 2019','Nov 2019'),
('Dept2','Jan 2019','Mar 2019'),
('Dept3','Nov 2019','Jan 2020'),
('Dept4','Apr 2019','Sep 2019'),
('Dept5','Jun 2019','Jul 2019');

-- unpivot the data into key value pairs
SELECT dept, val
FROM 
(
SELECT *
from #dept
) a
UNPIVOT
(
val
FOR name IN ([nextdate],[expecteddate])
) u

答案 1 :(得分:0)

您可以使用apply

select Department_Name, Future_Schedule_Date
from table t cross apply
     ( values (Next_Schedule_Date), (Expected_Scheduled_Date) 
     ) tt(Future_Schedule_Date)
order by Department_Name, Future_Schedule_Date;