none
COMO EJECUTAR UNA EXPRESIÓN SQL SOBRE MÚLTIPLES RESULTADOS RRS feed

  • Pregunta

  • Buen día apreciados señores. Seguramente la respuesta a mi consulta es muy obvia, pero no lo he decifrado.

    intento resolver algo como esto:

    select  
    stuff
    (   
       (SELECT STUFF('abcd', 1, 0, 'ijklmn')dato
       union all
       SELECT STUFF('abcd', 1, 0, 'ijklmn')
       union all
       SELECT STUFF('abcd', 1, 0, 'ijklmn')
       union all
       SELECT STUFF('abcd', 1, 0, 'ijklmn' )
    ),1,1,'')

    Y seguro ya dedujeron mi garrafal error... :( -->> 

    Msg 512, Level 16, State 1, Line 98
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

    La pregunta... Como se resuelve algo como eso ??

    Cabe resaltar que el script real es este :

    	select
    		stuff
    	   (  (     select 
    	   			stuff(   (select ',' + TablaCampo
    						  from TablaCampoInformes e
    						  where e.Tabla = d.Tabla 
    						  FOR XML PATH(''), TYPE
    						  ).value('.[1]', 'varchar(8000)'), 1, 1, ''
    				) Campos
    				from TablaCampoInformes d
    				group by d.Tabla  
    	     
           ),1,0,'concat(')	

    Gracias por su compartir sus conocimientos.


    • Editado EmerRios martes, 22 de agosto de 2017 16:31
    martes, 22 de agosto de 2017 16:26

Respuestas

Todas las respuestas

  • Como se resuelve algo como eso ?

    Puedes decirnos con palabras lo que tratas de hacer?


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    martes, 22 de agosto de 2017 16:30
  • Me explico...

    Este script:

    select stuff(   (select ',' + TablaCampo
    		from TablaCampoInformes e
    		where e.Tabla = d.Tabla 
    		FOR XML PATH(''), TYPE
    		).value('.[1]', 'varchar(8000)'), 1, 1, ''
    ) campos
    from TablaCampoInformes d
    group by d.Tabla  

    devuelve el siguiente resultado:

    ANA_BIOQUIMICA.IdPaciente,ANA_BIOQUIMICA.FechaAnalitica,ANA_BIOQUIMICA.GlucosaPre,ANA_BIOQUIMICA.Sodio
    ANA_CITOLOGIA.IdPaciente,ANA_CITOLOGIA.FechaAnalitica,ANA_CITOLOGIA.Papanicolau,ANA_CITOLOGIA.IVAA,ANA_CITOLOGIA.FechaModificacion
    ANA_ESPECIAL.IdPaciente,ANA_ESPECIAL.FechaAnalitica,ANA_ESPECIAL.CD4,ANA_ESPECIAL.CD4_PC

    Lo que necesito es, agregar a cada registro lo siguiente:

    concat (ANA_BIOQUIMICA.IdPaciente,ANA_BIOQUIMICA.FechaAnalitica,ANA_BIOQUIMICA.GlucosaPre,ANA_BIOQUIMICA.Sodio)
    concat (ANA_CITOLOGIA.IdPaciente,ANA_CITOLOGIA.FechaAnalitica,ANA_CITOLOGIA.Papanicolau,ANA_CITOLOGIA.IVAA,ANA_CITOLOGIA.FechaModificacion)
    concat( ANA_ESPECIAL.IdPaciente,ANA_ESPECIAL.FechaAnalitica,ANA_ESPECIAL.CD4,ANA_ESPECIAL.CD4_PC)

    Para lograr esto, según yo, ejecute la expresión stuff sobre la lista resultante del primer script mencionado arriba en esta respuesta en esta respuesta, es decir algo como esto:

    select
    		stuff
    	   (  (     select 
    	   			stuff(   (select ',' + TablaCampo
    						  from TablaCampoInformes e
    						  where e.Tabla = d.Tabla 
    						  FOR XML PATH(''), TYPE
    						  ).value('.[1]', 'varchar(8000)'), 1, 1, ''
    				) Campos
    				from TablaCampoInformes d
    				group by d.Tabla  
    	     
           ),1,0,'concat(')	

    la intención es agregar  concat a cada uno de los registros resultantes devueltos por el subquery, esto porque estoy trabajando con scripts dinámicos, he intento formar scripts a partir de "metada".

    martes, 22 de agosto de 2017 16:52
  • Trata:

    SELECT
    	'CONCAT(' + Campos + ')' AS col1
    FROM
    	(
    	SELECT 
    		STUFF(
    			(
    			SELECT ',' + TablaCampo
    			FROM TablaCampoInformes e
    			WHERE e.Tabla = d.Tabla 
    			FOR XML PATH(''), TYPE
    			).value('text()[1]', 'varchar(8000)'), 1, 1, ''
    		) Campos
    	FROM TablaCampoInformes d
    	GROUP BY d.Tabla
    	) AS T;


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Propuesto como respuesta Jorge TurradoMVP miércoles, 23 de agosto de 2017 14:19
    • Marcado como respuesta Moderador M lunes, 28 de agosto de 2017 4:23
    martes, 22 de agosto de 2017 17:17
  • Genial... sencillo y funcional. Gracias por la ayuda y principalmente por compartir la experiencia.
    miércoles, 23 de agosto de 2017 13:46