SELECT '
SELECT
ClaveNodo = '''+ CONVERT(VARCHAR(MAX), ISNULL(ClaveNodo,'NULL')) +'''' + ', '+'
Fecha = '''+ CONVERT(VARCHAR(MAX), ISNULL(Fecha,'NULL')) +'''' + ', '+'
PML_AVG = '''+ CONVERT(VARCHAR(MAX), AVG (PrecioMarginalLocal)) +'''' + ' ' +
'UNION ALL'
FROM Hechos.pmls
WHERE Claveprocesomercado
= 'MDA'
AND Clavesistema = 'SIN'
AND Fecha >= '2018-01-01'
AND ClaveNodo = '01AAN-85'
GROUP BY Fecha, ClaveNodo
ORDER BY Fecha
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-01', PML_AVG
= '668.858333' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-02', PML_AVG
= '1081.464583' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-03', PML_AVG
= '1520.851250' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-04', PML_AVG
= '1526.005000' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-05', PML_AVG
= '1597.107916' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-06', PML_AVG
= '962.502916' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-07', PML_AVG
= '688.050833' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-08', PML_AVG
= '1041.629166' UNION ALL
SELECT ClaveNodo = '01AAN-85', Fecha = '2018-01-09', PML_AVG
=
'913.394583' ;
UTILIZANDO UNA FUNCIÓN
IF OBJECT_ID ('dbo.up_GeneraCodigo_SelectInsert') IS NOT NULL DROP PROCEDURE
dbo.up_GeneraCodigo_SelectInsert;
GO
---------------------------------------
select insert
CREATE PROCEDURE
dbo.up_GeneraCodigo_SelectInsert
@Columnas VARCHAR(500), -- COLUMAS SEPARADAS POR COMAS
',' EJ: Column1,Column2,Column3
@NombreTabla VARCHAR (50) -- NOMBRE TABLA CON TODO Y ESQUEMA EJ: SchemaName.TableName
AS
BEGIN
DECLARE @MaxColumns TINYINT
--DECLARE @TableName VARCHAR (50);
DECLARE @Salida VARCHAR (MAX)
SELECT
Id
= ROW_NUMBER() OVER (ORDER BY [value])
,SplitColumn = [value]
INTO #Columnas
FROM
STRING_SPLIT (@Columnas,',')
SELECT @MaxColumns = MAX (Id) FROM #Columnas
DECLARE @Num TINYINT
DECLARE @NombreColumna VARCHAR (50)
SET @NUM = 0;
SET @Salida = 'SELECT '
--SET @TableName = 'Middle.Deals'
WHILE (@NUM <= @MaxColumns)
BEGIN
SET @NUM = ( SELECT TOP 1 ID FROM #Columnas WHERE Id > @Num ORDER BY Id);
IF (@NUM IS NOT NULL)
BEGIN
SET @NombreColumna = (SELECT LTRIM(RTRIM(SplitColumn)) FROM #Columnas WHERE Id = @Num);
SET @Salida = @Salida + '''' + CASE WHEN @NUM = 1 THEN 'SELECT ' ELSE '' END + CHAR(13) + CHAR(9) + @NombreColumna + ' = ' + '''''''' + '+' +'
CONVERT(VARCHAR(MAX), ISNULL(' + @NombreColumna + ',''NULL''))' + '+' + '''''''''' + '+' + '''' + ',' + '''' + '+'
END
END
SET @Salida = @Salida + ' FROM ' +
@NombreTabla
SET @Salida = REPLACE (@Salida, '+'',''+ FROM', ' + ''UNION ALL'' FROM');
SET @Salida = REPLACE (@Salida, ' FROM', CHAR(13) + 'FROM');
PRINT @salida
DROP TABLE #Columnas
END
GO
exec dbo.up_GeneraCodigo_SelectInsert
@Columnas = 'FolioBack,TradeDate,TradeHour',
@NombreTabla = 'Middle.Deals';
GO
hay que acomodar el procedure para que entregue esto:
SELECT
REPLACE (
'SELECT
[ClaveNodo] =
'''+ ISNULL(
CONVERT(VARCHAR(MAX),
[ClaveNodo] ) ,'NULL') +''''+','+'
[IdInyeccionEnergia]= '''+ ISNULL(
CONVERT(VARCHAR(MAX),
[IdInyeccionEnergia] ) ,'NULL') +''''+','+'
[NombreNodo] = '''+ ISNULL( CONVERT(VARCHAR(MAX), [NombreNodo] ) ,'NULL') +'''' + 'UNION ALL'
,'''NULL''','NULL')
FROM [DW].[Dim].[Nodos]
SELECT
[ClaveNodo] = '01AAN-85',
[IdInyeccionEnergia]= NULL,
[NombreNodo] = 'Actopan' ;
EL CONVERT ES PRIMERO, LUEGO EL ISNULL
AGREGAR EL REPLACE PARA QUITAR EL 'NULL' => NULL
No hay comentarios.:
Publicar un comentario