0

大家好,我在这里有这段代码,其中输出两列,一列是 1-30,另一列是今天前 30 天。

DECLARE @StartDate date

SELECT @StartDate = GETDATE()

;WITH cte AS (
SELECT 
              1 AS idx,
               DATEADD(d,-1,@StartDate) AS idxDate
UNION ALL
SELECT idx -1, DATEADD(d,-1,idxDate)
FROM cte
WHERE idx >-30
)
    SELECT idx DateValue, CONVERT(VARCHAR(10),idxDate,110) DateLabel
FROM CTE
OPTION (MAXRECURSION 0) 

目前看起来像这样

 DateValue   DateLabel
1            06-20-2013
0            06-19-2013
-1           06-18-2013
-2           06-17-2013
etc....

所以不是一开始的 1 和 0 它应该是 -1 并且我想在 datelabel 后面添加 dateavalue 看起来像这样:

 DateValue   DateLabel
-1            06-20-2013, -1
-2            06-19-2013, -2
-3            06-18-2013, -3
-4            06-17-2013, -4

提前致谢!

4

3 回答 3

2

你的意思是这样的:

DECLARE @StartDate date

SELECT @StartDate = GETDATE();

WITH cte AS 
(
     SELECT -1 AS idx, DATEADD(d,-1,@StartDate) AS idxDate
     UNION ALL
     SELECT idx -1, DATEADD(d,-1,idxDate)
     FROM cte
     WHERE idx >-30
)

SELECT idx DateValue, CONVERT(VARCHAR(10),idxDate,110) + ', ' + CAST(idx as nvarchar(max)) DateLabel
FROM CTE
OPTION (MAXRECURSION 0) 
于 2013-06-21T11:50:23.013 回答
0

你可以稍微调整一下你的最后SELECT一个:

  SELECT idx-2 AS DateValue, CONVERT(VARCHAR(10),idxDate,110) +', ' + CAST(idx-2 AS NVARCHAR(10)) DateLabel
FROM CTE
于 2013-06-21T11:52:01.953 回答
0

添加

order by DateValue desc

到您的查询结束。

于 2013-06-21T11:50:23.960 回答