Sql 第一次告诉我MonthNumber的价值是多少。在这里,你可以选择MonthNumber+1,从MonthNumber第一次赋值的方式开始。第一个MonthNumber是0。然后它基本上循环遍历每个值,直到MonthNumber等于12。我必须更新我的问题

Sql 第一次告诉我MonthNumber的价值是多少。在这里,你可以选择MonthNumber+1,从MonthNumber第一次赋值的方式开始。第一个MonthNumber是0。然后它基本上循环遍历每个值,直到MonthNumber等于12。我必须更新我的问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,第一次告诉我MonthNumber的价值是多少。在这里,你可以选择MonthNumber+1,从MonthNumber第一次赋值的方式开始。第一个MonthNumber是0。然后它基本上循环遍历每个值,直到MonthNumber等于12。我必须更新我的问题。请看一下我的第二阶段问题。thanks@Thomas如果你有其他问题,那么你应该发布一个新的问题。通常你不会编辑你的原始帖子来不断询问更新。网上有很多教程解释递归CTE是如何工作的,包括并告诉我第一次(N)的值是多少。在这里,您可以从首次赋值


第一次告诉我MonthNumber的价值是多少。在这里,你可以选择MonthNumber+1,从MonthNumber第一次赋值的方式开始。第一个MonthNumber是0。然后它基本上循环遍历每个值,直到MonthNumber等于12。我必须更新我的问题。请看一下我的第二阶段问题。thanks@Thomas如果你有其他问题,那么你应该发布一个新的问题。通常你不会编辑你的原始帖子来不断询问更新。网上有很多教程解释递归CTE是如何工作的,包括并告诉我第一次(N)的值是多少。在这里,您可以从首次赋值的月份中选择N+1。
SELECT 0 UNION ALL…
是语句的初始条件,代码必须起作用。若你们想要一个不同的初始值,只需要把它而不是0。我已经更新了我的问题。请看一下我的第二阶段问题。谢谢虽然此命令可能会回答问题,但提供了有关此代码为什么和/或如何回答问题的其他上下文,从而提高了其长期价值。
WITH R(N) AS
(
    SELECT 0
    UNION ALL
    SELECT N+1 
    FROM R
    WHERE N < 12
)

SELECT LEFT(DATENAME(MONTH,DATEADD(MONTH,-N,GETDATE())),3) AS [month]
FROM R
SELECT LEFT(DATENAME(MONTH,DATEADD(MONTH,-N,GETDATE())),3) AS [month] FROM R
when above sql execute how it is getting value for -N ??
because here i have not set anything for -N ??
;WITH months(MonthNumber) AS
(
    SELECT 0
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < 12
)
SELECT 0
UNION ALL
SELECT MonthNumber+1 
FROM months
WHERE MonthNumber < 12
SELECT MonthNumber+1 
FROM months
WHERE MonthNumber < 12
SELECT MonthNumber+1 
FROM months
WHERE MonthNumber < 12
DECLARE @TotaDays SMALLINT
DECLARE @Month VARCHAR(15)
DECLARE @Year SMALLINT
DECLARE @date DATETIME 
SET @Month = 'January'
SET @Year = 2015
SET @date = '01 ' + @Month + ' ' + CONVERT(VARCHAR(4),@Year)
SET @TotaDays = 0
SELECT @TotaDays = DATEDIFF(DAY, @date, DATEADD(MONTH, 1, @date))

;WITH months(MonthNumber) AS
(
    SELECT 1
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < @TotaDays
)

select * from months;
WITH R(N) AS
(
    SELECT 0
    UNION ALL
    SELECT N+1 
    FROM R
    WHERE N < 12
)

SELECT *
FROM R
Row# | N
     |
 1   | 0
 2   | 1
 3   | 2
 4   | 3
 5   | 4
 6   | 5
 7   | 6
 8   | 7
 9   | 8
 10  | 9
 11  | 10
 12  | 10
 13  | 12
;WITH months(MonthNumber) AS
(
    SELECT 0
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < 12
)
select *
from months;
| MONTHNUMBER |
---------------
|           0 |
|           1 |
|           2 |
|           3 |
|           4 |
|           5 |
|           6 |
|           7 |
|           8 |
|           9 |
|          10 |
|          11 |
|          12 |
;WITH months(MonthNumber) AS
(
    SELECT 0
    UNION ALL
    SELECT MonthNumber+1 
    FROM months
    WHERE MonthNumber < 12
)
SELECT LEFT(DATENAME(MONTH,DATEADD(MONTH,-MonthNumber,GETDATE())),3) AS [month]
FROM months;
set language  'SPANISH'
DECLARE @table table(fechaDesde datetime , fechaHasta datetime ) 
INSERT @table VALUES('20151231' , '20161231');
WITH x AS 
    (
        SELECT   DATEADD( m , 1 ,fechaDesde ) as fecha  FROM @table
        UNION ALL
        SELECT  DATEADD( m , 1 ,fecha )
        FROM @table t INNER JOIN x ON  DATEADD( m , 1 ,x.fecha ) <= t.fechaHasta
    )
SELECT LEFT( CONVERT( VARCHAR, fecha , 112 ) , 6 ) as Periodo_Id 
,DATEPART ( dd, DATEADD(dd,-(DAY(fecha)-1),fecha)) Num_Dia_Inicio
,DATEADD(dd,-(DAY(fecha)-1),fecha) Fecha_Inicio
,DATEPART ( mm , fecha ) Mes_Id
,DATEPART ( yy , fecha ) Anio
,DATEPART ( dd, DATEADD(dd,-(DAY(DATEADD(mm,1,fecha))),DATEADD(mm,1,fecha))) Num_Dia_Fin
,DATEADD(dd,-(DAY(DATEADD(mm,1,fecha))),DATEADD(mm,1,fecha)) ultimoDia
,datename(MONTH, fecha) mes
,'Q' + convert(varchar(10),  DATEPART(QUARTER, fecha)) Trimestre_Name
FROM x 
OPTION(MAXRECURSION 0)
SELECT DATENAME(MONTH, DATEADD(MM, s.number, CONVERT(DATETIME, 0))) AS [MonthName], 
MONTH(DATEADD(MM, s.number, CONVERT(DATETIME, 0))) AS [MonthNumber] 
FROM master.dbo.spt_values s 
WHERE [type] = 'P' AND s.number BETWEEN 0 AND 11
ORDER BY 2
with Months as 
( 
    select month(GETDATE()) as Monthnumber, datename(month, GETDATE()) as name, 1 as number
    union all
    select month(dateadd(month,number,(GETDATE()))) Monthnumber ,datename(month, dateadd(month,number,(GETDATE()))) as name, number+1 
    from Months 
    where number<12
)   
select Monthnumber, name 
from Months 
order by Monthnumber
WITH R (N)
AS
(SELECT
        0
    UNION ALL
    SELECT
        N + 1
    FROM R
    WHERE N < 12)

SELECT
    N
   ,DATENAME(MONTH, DATEADD(MONTH, N - 1, '1 Jan 1900')) AS [month]
FROM R
WHERE N > 0