¿Cómo pude lograr algo como esto?

DECLARE @TEMP_TABLE TABLE (DATA VARCHAR(MAX), SHADOW_ID INT)
DECLARE @TEMP_TABLE1 TABLE (ENT VARCHAR(MAX), RMR VARCHAR(MAX), DTM VARCHAR(MAX))

INSERT INTO @TEMP_TABLE1 (ENT) SELECT DATA from @TEMP_TABLE WHERE DATA LIKE 'ENT%'
INSERT INTO @TEMP_TABLE1 (RMR) SELECT DATA from @TEMP_TABLE WHERE DATA LIKE 'RMR%'
INSERT INTO @TEMP_TABLE1 (DTM) SELECT DATA from @TEMP_TABLE WHERE DATA LIKE 'DTM%'

Sin tener ningún valor nulo, porque cada declaración llena 1 columna y nulos en las otras dos.

¡Gracias!

0
OBL 20 abr. 2012 a las 20:01
4
No puedo imaginar por qué querrías hacer esto.
 – 
Jeremy Holovacs
20 abr. 2012 a las 20:03
Para tu segundo inserto, ¿te refieres a WHERE DATA LIKE 'RMR%'?
 – 
Tim Lehner
20 abr. 2012 a las 20:13
Si mi mal, yo haré la corrección
 – 
OBL
20 abr. 2012 a las 20:14

1 respuesta

La mejor respuesta

Parece que está intentando crear una consulta dinámica o de tabla cruzada.

insert into @TEMP_TABLE1 (ENT, RMR, DTM)
select a.ENT, a.RMR, a.DTM
from (
    select t.SHADOW_ID
        , (select DATA from @TEMP_TABLE where SHADOW_ID = t.SHADOW_ID and DATA like 'ENT%') as ENT
        , (select DATA from @TEMP_TABLE where SHADOW_ID = t.SHADOW_ID and DATA like 'RMR%') as RMR
        , (select DATA from @TEMP_TABLE where SHADOW_ID = t.SHADOW_ID and DATA like 'DTM%') as DTM
    from @TEMP_TABLE as t
    group by t.SHADOW_ID
) a

Esto supone que tiene solo un valor ENT, RMR y DTM para cada SHADOW_ID. Si este no es el caso, debo estar de acuerdo con @JeremyHolovacs.

Recomendaría poner SHADOW_ID en @ TEMP_TABLE1 también, para que pueda saber de dónde provienen los datos.

2
Tim Lehner 20 abr. 2012 a las 20:22
Resolví el problema de otra manera. Pero aún así gracias por la ayuda.
 – 
OBL
20 abr. 2012 a las 21:52