none
¿Cómo generar el siguiente formato en sql usando la clausula with? RRS feed

  • Pregunta

  • tengo una consulta:

    Quiero generar el siguiente formato en sql server usando la clausula with

    [TIPO 1],[TIPO 2],[TIPO 3]

    Aquí tengo un código que me genera fechas usando clausula with con un formato parecido al que deseo

    declare
    @Fecha1 date='10-10-2019',
    @Fecha2 date='20-10-2019',
    @SQLDynamic NVARCHAR(MAX)
    
    ;with CTE_DAY_Recursive as (
    SELECT @Fecha1 as DayDINAMIC 
    union all
    SELECT 
    dateadd (day, +1, DayDINAMIC) 
    from CTE_DAY_Recursive
    where DayDINAMIC < @Fecha2
    )
    SELECT  @SQLDynamic=COALESCE(@SQLDynamic+',','')+'['+CAST(DayDINAMIC    AS nvarchar(20))+']' 
    FROM CTE_DAY_Recursive
    
    print @SQLDynamic

    Me genera lo siguiente

    [2019-10-10],[2019-10-11],[2019-10-12],[2019-10-13],[2019-10-14],[2019-10-15],[2019-10-16],[2019-10-17],[2019-10-18],

    [2019-10-19],[2019-10-20]

    Agradecería mostrar una respuesta en el mismo código mostrado pero como una variable @SQLDynamic2 ya que deseo usar ese formato para pasarlo a un pivot

    • Editado DUM28 jueves, 7 de noviembre de 2019 5:50
    jueves, 7 de noviembre de 2019 5:46

Todas las respuestas

  • Hola DUM28:

    Ya que estas utilizando un cte recursivo, es tan simple como añadir al mismo un nivel

    DECLARE @Fecha1 DATE= '10-10-2019', @Fecha2 DATE= '20-10-2019', @SQLDynamic NVARCHAR(MAX);
    
    WITH CTE_DAY_Recursive
         AS (
    		 SELECT @Fecha1 AS DayDINAMIC, 1 as level
    			UNION ALL
             SELECT DATEADD(day, +1, DayDINAMIC), level + 1
    			FROM CTE_DAY_Recursive
                    WHERE DayDINAMIC < @Fecha2)
         SELECT @SQLDynamic = COALESCE(@SQLDynamic + ',', '') + '[' + CAST(DayDINAMIC AS NVARCHAR(20)) + '],[TIPO '+cast(level as nvarchar(3))+']'
    		FROM CTE_DAY_Recursive;
    
    PRINT @SQLDynamic;

    En la primera parte del cte, le añades un número 1, luego en la parte recursiva le sumas 1 a cada nivel de recursividad, y por ultimo en la salida del cte, a la variable @sqlDynamic le añades el literal tipo y el nivel

    Tablas de expresión común Recursivo

    https://javifer2.wordpress.com/2018/12/20/with-cte-tablas-de-expresion-comun-recursividad-3/

    Salida

    2019-10-10],[TIPO 1],[2019-10-11],[TIPO 2],[2019-10-12],[TIPO 3],[2019-10-13],[TIPO 4],......

    jueves, 7 de noviembre de 2019 21:40