在一列中汇总日期

时间:2016-12-06 13:41:14

标签: sql sql-server

出于报告目的,我需要提供表格中的数据:

table A (column1, column2, date1, date2, date3,...,dateN)

我的查询需要在一列中以#。

分隔所有日期
(YYYY-MM-DD# YYYY-MM-DD#..)

但问题是日期列的数量不固定,因为从产品到产品可以是不同的日期数。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

此语句适用于postgresql,但您可以将||替换为+我认为sql-server,只需尝试它应该可以工作,您应该能够弄清楚其余部分。< / p>

||是postgres中的串联符号,或者您也可以使用可用的连接函数。

SELECT column1 || CASE WHEN column2 IS NOT NULL THEN '#' || column2 ELSE '' END || ... FROM tablehere

希望它有所帮助!

答案 1 :(得分:1)

经过考虑,我想改变我的答案。也许更轻一点

Declare @YourTable table (Column1 int,Column2 int,date1 date,date2 date,date3 date)
Insert Into @YourTable values
(1,25,'2016-01-15','2016-03-22',null),
(2,50,'2016-04-15','2016-07-29','2016-09-30')

Select Column1
      ,Column2
      ,Dates=Replace(Replace((
             Select  x=format(date1,'yyyy-MM-dd# ')
                    ,x=format(date2,'yyyy-MM-dd# ')
                    ,x=format(date3,'yyyy-MM-dd# ')
                    --x=format(dateNN,'yyyy-MM-dd# ')
              For  XML Path('')
             ) ,'<x>',''),'</x>','')
 From  @YourTable

返回

Column1 Column2 Dates
1       25      2016-01-15# 2016-03-22# 
2       50      2016-04-15# 2016-07-29# 2016-09-30#