Consulta a un sindicato tabla con los campos como columnas
-
09-06-2019 - |
Pregunta
No estoy muy seguro de si esto es posible, o cae en la categoría de las tablas dinámicas, pero pensé que había que ir a los profesionales a ver.
Tengo tres tablas:Tarjeta de Propiedad, y CardProperty.Ya que las tarjetas no tienen las mismas propiedades, y a menudo con varios valores para la misma propiedad, me decidí a utilizar la mesa de la unidad enfoque para almacenar datos, en lugar de tener una gran estructura de columnas en mi tarjeta de la mesa.
La tabla de propiedades es un básico de palabras clave/tipo de valor de la tabla.Así que tiene la palabra clave ATK y el valor asignado.Hay otra propiedad llamada SpecialType que una tarjeta puede tener varios valores, como "Sycnro" y "OSCURO"
Lo que me gustaría hacer es crear una vista o un procedimiento almacenado que me da la Tarjeta de Identificación, Tarjeta de Nombre, y todos los bienes palabras clave asignado a la tarjeta como columnas, y sus valores en el conjunto de resultados de una tarjeta de crédito especificada.Idealmente, me gustaría tener un conjunto de resultados como:
ID NAME SPECIALTYPE
1 Red Dragon Archfiend Synchro
1 Red Dragon Archfiend DARK
1 Red Dragon Archfiend Effect
y yo podría recuento de los resultados de mi de esa manera.
Supongo que incluso los más pulidos sería simplemente concatenar las propiedades del conjunto en función de su palabra clave, lo que podría generar un conjunto de resultados como:
1 Red Dragon Archfiend Synchro/DARK/Effect
..pero no sé si eso es factible.
Me ayudan a stackoverflow Kenobi!Tú eres mi única esperanza.
Solución
¿Esto es para SQL server?
Si sí, entonces
Concatenar Los Valores De Varias Filas En Una Columna (2000)
Concatenar Los Valores De Varias Filas En Una Columna Ordenada (2005+)
Otros consejos
Pero los valores son los valores se mantienen en columnas separadas y ha de saber que su "tipos especiales" una cabeza de tiempo:
Consulta SQL para comparar las ventas de productos por mes
De lo contrario me gustaría hacer esto con el cursor en un procedimiento almacenado o una preforma de la transformación de los negocios o de la capa de presentación.
Puñalada en sql si usted sabe todos los casos:
Select
ID,NAME
,Synchro+DARK+Effect -- add a some substring logic to trim any trailing /'s
from
(select
ID
,NAME
--may need to replace max() with min().
,MAX(CASE SPECIALTYPE WHEN "Synchro" THEN SPECIALTYPE +"/" ELSE "" END) Synchro
,MAX(CASE SPECIALTYPE WHEN "DARK" THEN SPECIALTYPE +"/" ELSE "" END) DARK
,MAX(CASE SPECIALTYPE WHEN "Effect" THEN SPECIALTYPE ELSE "" END) Effect
from
table
group by
ID
,NAME) sub1
No colapsar por la concatenación para el almacenamiento de los registros relacionados en la base de datos.No es exactamente de las mejores prácticas.
Lo que usted describe es una tabla dinámica.El uso de tablas dinámicas duro.Te sugiero que evitarlos si es posible.
¿Por qué no acaba de leer en sus filas y proceso en la memoria?No suena como que vas a pasar muchas milisegundos haciendo esto...
Una opción es tener las Propiedades tienen un PropertyType, así:
table cards
integer ID | string name | ... (other properties common to all Cards)
table property_types
integer ID | string name | string format | ... (possibly validations)
table properties
integer ID | integer property_type_id | string name | string value
foreign key property_type_id references property_types.ID
table cards_properties
integer ID | integer card_id | integer property_id
foreign key card_id references cards.ID
foreign key property_id references propertiess.ID
De esa manera, cuando se desea establecer un nuevo valor de la propiedad, usted puede validar por su tipo.Un tipo puede ser "SpecialType" con una enumeración de valores.
Tengo un tipo de formato para mi tabla de propiedades, de esa manera sé cómo cast/evaluar cuando estoy tratando con un valor entero.No estaba seguro de si era pertinente a esta cuestión o no.