pregunta sql..¿Cómo puedo agregar columnas dinámicamente a un conjunto de resultados de una consulta SQL?

StackOverflow https://stackoverflow.com/questions/763454

  •  11-09-2019
  •  | 
  •  

Pregunta

Estoy escribiendo un informe para devolver detalles sobre un objeto ("archivos") en mi base de datos.Mi aplicación permite a los usuarios crear sus propios indicadores para usarlos en objetos de archivos.Las banderas consisten básicamente en un nombre, luego las instancias de bandera almacenan un valor de bit para indicar si está configurado para el objeto de archivo principal.

Quiero escribir una consulta que devuelva una fila por archivo en la base de datos, donde las primeras columnas del conjunto de resultados contengan los detalles del archivo (id, nombre, tamaño, etc.) y las columnas restantes sean los nombres de las banderas, con valores de bits devueltos. para indicar si la bandera está configurada para la fila del archivo dada.

¿Tiene sentido?¿Cómo hago para escribir la consulta?

Gracias por cualquier ayuda.

Editar:Aclaración..

Como parte de esta consulta, necesito ejecutar una subconsulta que devuelva los indicadores creados por el usuario (no los conozco en el momento del diseño), luego incorporar una verificación para cada valor de indicador en la consulta principal para devolver detalles. sobre los archivos.

Esquema simplificado de la siguiente manera:

  • Archivo {Identificación, Nombre}
  • Marcar {Identificación, Nombre}
  • FileFlags {FileId, FlagId}: una fila en esta tabla indica que la bandera está configurada para el archivo

Necesito que la consulta devuelva un conjunto de resultados con columnas como esta:

ID de archivo Nombre del archivo Bandera1Nombre Bandera2Nombre .... BanderaNNombre

¿Fue útil?

Solución

Se podría empezar por mirar la función pivote disponible en servidor SQL 2005 +. Con eso y un poco de la concatenación de cadenas que debe ser capaz de montar una consulta para cualquier número de columnas

De acuerdo con su comentario su selecto sería algo como esto:

        SELECT <non-pivoted column>,

            [first pivoted column] AS <column name>,

            [second pivoted column] AS <column name>, ...
    From Table 
    PIVOT (
...
FOR 
...
)

Otros consejos

¿Por qué no crear un procedimiento almacenado con la lógica requerida (consultar indicadores específicos del usuario, etc.) y, sobre esa base, crear dinámicamente una cadena de consulta con las variables que necesita?

Luego puedes usar EXECUTE para devolver la consulta dinámica configurada al usuario.Ver http://msdn.microsoft.com/en-us/library/ms188332.aspx

Suena como tal necesita una consulta de referencias cruzadas, en la que desea convertir filas en columnas. Son las banderas almacenan en una tabla separada como una relación de uno a muchos a la tabla padre?

Creo que quieres es un alias. Este es un ejemplo de http://www.sql-tutorial.net/SQL-Aliases .asp

SELECT Employee, SUM(Hours) AS SumHoursPerEmployee
FROM EmployeeHours
GROUP BY Employee 

Me realmente tiene que ver su esquema para ayudar aún más.

Editar Tal vez necesita SELECTs anidados. http://sqlzoo.net/1a.htm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top