ejemplo - Concatenar columnas usando columna derivada en ssis
ejemplo derived column ssis (2)
Esto debería funcionar:
(DT_STR,50,1252)((Column1 == "" ? "" : Column1 + "|") + (Column2 == "" ? "" : Column2 + "|") + (Column3 == "" ? "" : Column3 + "|") + (Column4 == "" ? "" : Column4))
Básicamente, debe verificar si hay un valor vacío en cada columna y concatenar con cadena vacía o el contenido de la columna, y un separador opcional según la ubicación de la columna.
Lo que intento lograr es la Column 5
:
Column 1 Columns 2 Column 3 Column 4 Column 5
A B D A|B|D
Utilicé una columna derivada:
(DT_STR,50,1252)([A] + "|" + [B] + "|" + [C] + "|" + [D])
Pero terminé con:
Column 1 Columns 2 Column 3 Column 4 Column 5
A B D A|B||D
Estoy luchando por encontrar la solución correcta.
Su problema es que tiene una columna de datos vacía y no ha intentado probarla o manejarla en su concatenación.
Si sabes que solo tendrás una columna vacía en una fila, la siguiente expresión corregirá. Simplemente agrega una llamada REPLACE
a la cadena resultante para hacer que los tubos dobles formen una sola tubería.
(DT_STR,50,1252)REPLACE(([Column 1] + "|" + [Column 2] + "|" + [Column 3] + "|" + [Column 4]),"||","|")
De lo contrario, deberá verificar si la columna tiene un valor y solo entonces agregará el delimitador. Eso daría lugar a una expresión como la siguiente
(DT_STR,50,1252)(([Column 1] + ((LEN([Column 1]) == 0) ? "" : "|") + [Column 2] + ((LEN([Column 2]) == 0) ? "" : "|") + [Column 3] + ((LEN([Column 3]) == 0) ? "" : "|") + [Column 4]))
Teniendo en cuenta los siguientes datos de muestra
SELECT
''A'' AS [Column 1]
, ''B'' AS [Column 2]
, '''' AS [Column 3]
, ''D'' AS [Column 4]
UNION ALL
SELECT
''A'' AS [Column 1]
, '''' AS [Column 2]
, '''' AS [Column 3]
, ''D'' AS [Column 4]
UNION ALL
SELECT
''A'' AS [Column 1]
, '''' AS [Column 2]
, '''' AS [Column 3]
, '''' AS [Column 4]
UNION ALL
SELECT
'''' AS [Column 1]
, '''' AS [Column 2]
, '''' AS [Column 3]
, ''D'' AS [Column 4];
Generado los siguientes resultados
En este punto, probablemente omita la columna derivada y utilice un Componente de script para generar los datos concatenados. Expression''s that scroll son desafíos de mantenimiento. Además, los scripts anteriores no tienen en cuenta los NULL.