Esta es mi segunda pregunta de SQL hoy - Soy un poco novato en materia de DBA ...¿Cómo unir los resultados de dos consultas en SQL Server?
Estoy tratando de unir una compleja consulta SQL para fusionar los datos en aproximadamente 12 tablas en 1 sola mesa. Aunque hay una o varias relaciones en la base de datos, sé cuáles serán los números máximos de cada una.
lo tanto, tengo (! Con la ayuda de desbordamiento de pila) aplanar el primer nivel de mi base de datos, y tienen un par de consultas, que ahora debe ser unidas entre sí:
(abreviada)
SELECT
A.StudentId, C1.Topic AS SIoC1, C1.Level AS SIoCScore1
FROM Assessment A
LEFT JOIN Concern C1 ON A.Id = Assessment_Id and C1.TopicNumber = 1
WHERE A.Type = 'School'
SELECT
A.StudentId, C1.Topic AS PIoC1, C1.Level AS PIoCScore1
FROM Assessment A
LEFT JOIN Concern C1 ON A.Id = Assessment_Id and C1.TopicNumber = 1
WHERE A.Type = 'Parent'
¿Es posible nombrar consultas como alias?
O qué más puedo unirme a estas dos consultas por lo que la salida es igual:
| A.Id | SIoC1 | SIoCScore1 | PIoC1 | PIoCScore1 |
** ACTUALIZACIÓN ** El dominio detrás de esto es que una evaluación se lleva a cabo, en el que tanto la escuela y los padres debe informar. Por lo tanto, la fila única identifica una evaluación que tiene valores tanto de la escuela como de los padres.
Estoy usando SQL Server 2005.
¡Gracias!
* ADEMÁS DE ACTUALIZACIÓN * Esta consulta parece hacer el trabajo ...
SELECT PreConcerns.StudentId, TIoC1, TIoCScore1, PIoC1, PIoCScore1
FROM
Assessment PreConcerns
LEFT OUTER JOIN
(
SELECT
P.StudentId, C1.Topic AS TIoC1, C1.Level AS TIoCScore1
FROM Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
WHERE P.Type = 'School'
) scons
ON scons.StudentId= PreConcerns.StudentId
LEFT OUTER JOIN
(
SELECT
P.StudentId, C1.Topic AS PIoC1, C1.Level AS PIoCScore1
FROM Assessment P
LEFT JOIN Concern C1 ON P.Id = C1.Assessment_Id and C1.TopicNumber = 1
WHERE P.Type = 'Parent'
) pcons
ON pcons.StudentId = PreConcerns.StudentId
nueva actualización (toma 2!) ** (no estoy seguro si volviera a abrir esto como una nueva pregunta?!) Volví al trabajo hoy, para encontrar que mi 'solución' anterior no resolvió del todo el problema, crea dos filas para cada evaluación.
Así que para recapitular, que tienen las siguientes tablas:
Student (int:id, varchar(50):name)
Assessment (int:id, date:date, int:StudentId,)
Concern (int:id, int:assessment_id, varchar(20):topic, int:level)
Así que para cada estudiante en el sistema hay exactamente dos evaluaciones - uno con el tipo 'School', y uno con el tipo de 'padre'.
I desea crear una sola fila que combina las evaluaciones y preocupaciones:
(pseudo columnas :)
| Assessment.StudentId | SchoolConcernTopic | SchoolConcernLevel | ParentConcernTopic | ParentConcernLevel |
o desde el sql anteriormente:
| PreConcerns.StudentId | SIoC1 | SIoCScore1 | PIoC1 | PIoCScore1 |
Con sólo una fila poblada por alumno, que combina ambas evaluaciones. Tengo la estructura para esto trabajando con el SQL anterior, ¡pero devuelve dos filas! Y no puedo encontrar la forma de actualizar esto para solo devolver uno, ¡cualquier ayuda recibida con gratitud!
Gracias como siempre!
He actualizado mi pregunta con un poco de dominio fondo - gracias – laura