行到一列

时间:2019-02-26 13:40:40

标签: sql sql-server

我有sql查询:

DECLARE @StartDate  DATETIME,
    @EndDate    DATETIME;

SELECT   @StartDate = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)        
    ,@EndDate   = getdate();


SELECT LEFT(CONVERT(varchar, DATEADD(MM, DATEDIFF(MM, 0, DATEADD(MONTH, x.number, @StartDate)), 0),112),6) AS MonthName --LEFT(CONVERT(varchar, DATEADD(MONTH, x.number, @StartDate)), 0),112),6)
FROM    master.dbo.spt_values x
WHERE   x.type = 'P'        
AND     x.number <= DATEDIFF(MONTH, @StartDate, @EndDate)`

我需要使用以下格式:

201901,201902

谢谢

2 个答案:

答案 0 :(得分:0)

在下面的查询中尝试以下方法:

选择(Stuff((Select','+ cast(eid as varchar(10))From employee FOR XML PATH('')),1,2,''))

答案 1 :(得分:0)

对于旧版SQL Server,您可以尝试如下操作。

DECLARE @StartDate  DATETIME,
    @EndDate    DATETIME;

SELECT   @StartDate = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)        
    ,@EndDate   = getdate();

;with cte as
(
SELECT LEFT(CONVERT(varchar, DATEADD(MM, DATEDIFF(MM, 0, DATEADD(MONTH, x.number, @StartDate)), 0),112),6) AS MonthName 
FROM    master.dbo.spt_values x
WHERE   x.type = 'P'        
AND     x.number <= DATEDIFF(MONTH, @StartDate, @EndDate)
)

SELECT  DISTINCT 
            STUFF ((
                SELECT ', ' + [MonthName]
                FROM 
                cte
                ORDER BY [MonthName]
                FOR XML PATH('')
                ),1,2,'' )
            AS [MonthName]

对于SQL Server 2017+,您可以使用STRING_AGG,如下所示。

select STRING_AGG (MonthName, ',') as MonthName
FROM CTE