2017-07-27 65 views
1

我有調用時返回以下信息的功能:如何將SQL查詢返回的值拆分爲SQL SERVER中的多個列?

select * from functionName(null, '1 jan 2016', '30 dec 2016') 

輸出:

pcode  PayoutDate 

    100   2016-02-28 00:00:00:000 
    100   2016-05-31 00:00:00:000 
    100   3016-08-31 00:00:00:000 
    100   3016-11-30 00:00:00:000 
    103   2016-02-28 00:00:00:000 
    103   2016-05-31 00:00:00:000 
    103   3016-08-31 00:00:00:000 
    103   3016-11-30 00:00:00:000 

我們在二月,五月,八月和十一月底做支付給我們的客戶。

所以我想實現是有每個月都有自己的日期,如下圖所示:

pcode May      August    November 

100 2016-05-31 00:00:00:000 3016-08-31 00:00:00:000 3016-11-30 00:00:00:000 
103 2016-05-31 00:00:00:000 3016-08-31 00:00:00:000 3016-11-30 00:00:00:000 

我如何拆分數據集,以反映如上圖所示?

我真的不知道如何解決這個問題,任何人有任何想法?

回答

2

使用PIVOT

SELECT * FROM 
(SELECT pcode, datename(month, PayoutDate) AS Month, PayoutDate FROM yourtable) a 
PIVOT 
(MIN(PayoutDate) FOR Month IN ([May], [August], [November]))b 

輸出

pcode May     August    November 
100 2016-05-31T00:00:00Z 3016-08-31T00:00:00Z 3016-11-30T00:00:00Z 
103 2016-05-31T00:00:00Z 3016-08-31T00:00:00Z 3016-11-30T00:00:00Z 

SQL小提琴:http://sqlfiddle.com/#!6/9ed49/11/0

+0

謝謝Matt,好像在工作 – Immortal

1

可以進入功能結果到臨時表。 這裏的示例表名稱:SOF_Pcode

select distinct pcode , (select P1.PayoutDate from SOF_Pcode P1 where P1.pcode =P.pcode and DATEPART(month,P1.PayoutDate) =5) As May 
, (select P1.PayoutDate from SOF_Pcode P1 where P1.pcode =P.pcode and DATEPART(month,P1.PayoutDate) =8) As August 
    , (select P1.PayoutDate from SOF_Pcode P1 where P1.pcode =P.pcode and DATEPART(month,P1.PayoutDate) =11) As November from SOF_Pcode P