none
select @query in sql server result capturar datos ? https://user-images.githubusercontent.com/24657358/88972526-5493bc80-d27b-11ea-86dd-264ffdbddfb9.png RRS feed

  • Pregunta

  • Buenas tardes comunidad tengo una consulta como puedo guardar el select de una tabla pivoteada considerando que hay una subconsulta internamente @query ya que el resultado de la consulta en general visualizado en SQL pero no lo puedo capturar ni mostrar en una tabla temporal

                  
    DECLARE @cols       NVARCHAR(MAX)=''
    DECLARE @query      NVARCHAR(MAX)=''
    DECLARE @COLS_SUM   NVARCHAR(MAX)=''
    DECLARE @COLS_TOT   NVARCHAR(MAX)=''
    
    --Preparing columns for Pivot
    SELECT @cols = @cols + QUOTENAME(MARCA) + ',' 
    FROM (SELECT DISTINCT MARCA FROM [PCS] ) AS tmp
    SELECT @cols = SUBSTRING(@cols, 0, LEN(@cols))
    
    --Preparing sum of columns for Totals Horizontal
    SELECT @COLS_SUM = @COLS_SUM +'IsNull('+ QUOTENAME(MARCA)+',0)' + '+' 
    FROM (SELECT DISTINCT MARCA FROM [PCS] ) AS tmp
    SELECT @COLS_SUM =  SUBSTRING(@COLS_SUM, 0, LEN(@COLS_SUM)) +' AS [TOTAL]'
    
    --Preparing sum of individual columns for Totals Vertically
    SELECT @COLS_TOT = @COLS_TOT +'SUM('+ QUOTENAME(MARCA) + '),' 
    FROM (SELECT DISTINCT MARCA FROM [PCS] ) AS tmp
    SELECT @COLS_TOT = SUBSTRING(@COLS_TOT, 0, LEN(@COLS_TOT)) 
    
    
    SET @query = 
                ' SELECT * , '+@COLS_SUM +'  INTO #TAB FROM 
                (
                        SELECT ING_FECHA, item, MARCA 
                        FROM [PCS]
                ) src
                PIVOT 
                (
                        SUM(item) FOR MARCA IN (' + @cols + ')
                ) piv
       
    			SELECT * FROM #TAB
                UNION ALL
                SELECT NULL AS TOTAL ,'+@COLS_TOT+',SUM(TOTAL) FROM #TAB
                SET ANSI_WARNINGS OFF 
                '
    
               
                EXECUTE SP_EXECUTESQL @query


    Trate de hacerlo capturando toda esa consulta SQL en un store procedure pero pero me pide setear los campos null.

    NOTA:PCS es una simple vista 

    Saludos,

    Lujan


    • Editado Jose Lujan jueves, 30 de julio de 2020 20:40 sintaxis SQL
    jueves, 30 de julio de 2020 20:21

Todas las respuestas

  • Hola Jose Lujan:

    Puedes hacerlo envolviendo el resultado de la query completa en una tabla derivada.

    DECLARE @cols       NVARCHAR(MAX)=''
    DECLARE @query      NVARCHAR(MAX)=''
    DECLARE @COLS_SUM   NVARCHAR(MAX)=''
    DECLARE @COLS_TOT   NVARCHAR(MAX)=''
    
    --Preparing columns for Pivot
    SELECT @cols = @cols + QUOTENAME(MARCA) + ',' 
    FROM (SELECT DISTINCT MARCA FROM [PCS] ) AS tmp
    SELECT @cols = SUBSTRING(@cols, 0, LEN(@cols))
    
    --Preparing sum of columns for Totals Horizontal
    SELECT @COLS_SUM = @COLS_SUM +'IsNull('+ QUOTENAME(MARCA)+',0)' + '+' 
    FROM (SELECT DISTINCT MARCA FROM [PCS] ) AS tmp
    SELECT @COLS_SUM =  SUBSTRING(@COLS_SUM, 0, LEN(@COLS_SUM)) +' AS [TOTAL]'
    
    --Preparing sum of individual columns for Totals Vertically
    SELECT @COLS_TOT = @COLS_TOT +'SUM('+ QUOTENAME(MARCA) + '),' 
    FROM (SELECT DISTINCT MARCA FROM [PCS] ) AS tmp
    SELECT @COLS_TOT = SUBSTRING(@COLS_TOT, 0, LEN(@COLS_TOT)) 
    
    SET @query = 
                '
     DROP TABLE IF EXISTS ##MITABLAGLOBAL;
    -- LA SINTAXIS DE DROP TABLE IF EXISTS, VÁLIDA PARA SQL 2016 O SUPERIOR
    			SELECT * INTO ##MITABLAGLOBAL (
    			SELECT * , '+@COLS_SUM +'  INTO #TAB FROM 
                (
                        SELECT ING_FECHA, item, MARCA 
                        FROM [PCS]
                ) src
                PIVOT 
                (
                        SUM(item) FOR MARCA IN (' + @cols + ')
                ) piv
       
    			SELECT * FROM #TAB
                UNION ALL
                SELECT NULL AS TOTAL ,'+@COLS_TOT+',SUM(TOTAL) FROM #TAB
    			) AS TBLDERIVADA
                SET ANSI_WARNINGS OFF 
                '
    
               
                EXECUTE SP_EXECUTESQL @query

    El resultado ahora lo dispondrás en una tabla temporal global ##MITABLAGLOBAL

    viernes, 31 de julio de 2020 4:54
  • gracias Javi lo he realizado con el INTO LUJAN1

    DECLARE @cols       NVARCHAR(MAX)=''
    DECLARE @query      NVARCHAR(MAX)=''
    DECLARE @COLS_SUM   NVARCHAR(MAX)=''
    DECLARE @COLS_TOT   NVARCHAR(MAX)=''
    
    --Preparing columns for Pivot
    SELECT @cols = @cols + QUOTENAME(MARCA) + ',' 
    FROM (SELECT DISTINCT MARCA FROM [PCS_CARTOGRAFIA] ) AS tmp
    SELECT @cols = SUBSTRING(@cols, 0, LEN(@cols))
    
    --Preparing sum of columns for Totals Horizontal
    SELECT @COLS_SUM = @COLS_SUM +'IsNull('+ QUOTENAME(MARCA)+',0)' + '+' 
    FROM (SELECT DISTINCT MARCA FROM [PCS_CARTOGRAFIA] ) AS tmp
    SELECT @COLS_SUM =  SUBSTRING(@COLS_SUM, 0, LEN(@COLS_SUM)) +' AS [TOTAL]'
    
    --Preparing sum of individual columns for Totals Vertically
    SELECT @COLS_TOT = @COLS_TOT +'SUM('+ QUOTENAME(MARCA) + '),' 
    FROM (SELECT DISTINCT MARCA FROM [PCS_CARTOGRAFIA] ) AS tmp
    SELECT @COLS_TOT = SUBSTRING(@COLS_TOT, 0, LEN(@COLS_TOT)) 
    
    
    SET @query = 
                'SELECT * , '+@COLS_SUM +'  INTO #TAB FROM 
                (
                        SELECT ING_FECHA, item, MARCA 
                        FROM [PCS_CARTOGRAFIA]
                ) src
                PIVOT 
                (
                        SUM(item) FOR MARCA IN (' + @cols + ')
                ) piv
       
    			SELECT * INTO LUJAN1  FROM #TAB
                UNION ALL
                SELECT NULL AS TOTAL ,'+@COLS_TOT+',SUM(TOTAL) FROM #TAB
                SET ANSI_WARNINGS OFF 
                '
             EXECUTE SP_EXECUTESQL @query
    		
    		SELECT * FROM LUJAN1
    		--print @query


    • Editado Jose Lujan martes, 4 de agosto de 2020 0:50 sintaxis realizado
    martes, 4 de agosto de 2020 0:49