esta será la primera pregunta que he publicado aquí, así que disculpe cualquier error imprevisto en la etiqueta de la placa.Datos no agregados "pivotantes" en SQL Server
En mi proyecto actual, tomé una gran tabla no normalizada y la dividí en cuatro tablas separadas y normalizadas. Mi objetivo final al que me estoy dirigiendo es crear una vista que imite la tabla no normalizada de compatibilidad con versiones anteriores.
Para proporcionar una instantánea simplificada de mi escenario, el quid de lo que estoy tratando de hacer mentiras en dos tablas:
ASSOC_ROLE ASSOCIATE
---------- ----------
assoc_id (fk) assoc_id (pk)
role_id (fk) last_name
org_nbr (fk)
Así que si emito la siguiente consulta ...
SELECT Assoc_Role.org_nbr, Assoc_Role.assoc_id, Associate.last_name, Assoc_Role.role_id
FROM Assoc_Role INNER JOIN
Associate ON Assoc_Role.assoc_id = Associate.assoc_id
WHERE Assoc_Role.org_nbr = '1AA'
... me sale el siguiente conjunto de resultados
org_nbr assoc_id last_name role_id
------- -------- --------- -------
1AA 1447 Cooper 1
1AA 1448 Collins 3
1AA 1448 Collins 4
1AA 1448 Collins 5
1AA 1449 Lynch 6
en última instancia, la vista me gustaría construir sería algo como esto :
org_nbr role1_ID role1_name role2_ID role2_name role3_ID role3_name role4_ID role4_name role5_ID role5_name role6_ID role6_name
------- -------- ---------- -------- ---------- -------- ---------- -------- ---------- -------- ---------- -------- ----------
1AA 1447 Cooper NULL NULL 1448 Collins 1448 Collins 1448 Collins 1449 Lynch
Mi idea inicial era tratar de utilizar el comando de pivote, pero mi opinión es que PIVOT requiere algún tipo de agregación, y que no se ajusta a mi escenario. También he jugado con el comando CASE en la cláusula SELECT, pero no aplana mi conjunto de resultados a un solo registro.
Espero que alguien pueda arrojar algo de luz sobre cómo puedo lograr esto. Avíseme si alguien necesita más información. ¡Gracias!
Scot
Interesante ... Soy bastante nuevo en la formación de consultas SQL en este nivel avanzado, por lo que nunca habría pensado en unirme consecutivamente a una tabla, pero puedo ver claramente cómo funciona. Mi próximo desafío será incorporar esto en una consulta más amplia, pero esto me da un gran comienzo. ¡Muchas gracias! Una pregunta sin embargo, con respecto a: "Por supuesto, esto no alcanzará si el máximo role_id aumenta ..." ¿Quiere decir simplemente que si tuviera que agregar más role_ID's, tendría que contabilizarlos en el consulta, o ¿estás sugiriendo más que eso? – ScottieByNature
@ScottieByNature si aumenta el 'role_ID' máximo, tiene dos opciones. Si el cambio está en la línea de "solía haber como máximo 6 pero ahora hay como mucho 9", necesitaría agregar a la consulta lo que espero sea la manera más clara. Sin embargo, si es "ahora habrá un número arbitrario de posibles roles", entonces se debe buscar un enfoque diferente, en cuyo caso las consideraciones de @Chris Lively entran en juego, y se debe pensar en hacerlo fuera de SQL, o usando dinámicas SQL, o algo completamente distinto, puedes venir y preguntar aquí :) – AakashM
Entendido ... ¡muy apreciado! – ScottieByNature