Cómo pivotar filas sin agrupar, contar, promediar

Estoy reelaborando algunas tablas de una base de datos jodida. Algunas de las tablas tenían los mismos datos con diferentes nombres de tabla, y cada una de ellas también tenía datos similares pero diferentes nombres de columna. De todos modos, esta es una solicitud extraña, pero tiene que ser así.

Necesito girar las filas hacia arriba para simular una fila y poder crear un registro a partir de dos tablas diferentes.

He adjuntado una foto. La tabla de la izquierda extraerá una sola fila y la tabla de la izquierda proporcionará 1 - n filas según la identificación de la tabla de la izquierda. Necesito girar las filas hacia arriba para simular una fila y crear un registro con los dos resultados.

Desde mi verificación en línea, el pivote parece ser el camino a seguir, pero parece querer que agrupe o haga algún tipo de agregación.

¿Cuál es la mejor forma de hacerlo?

table1 ---Produces one row
table1id | col1 | col2 | col3
1    Wow    Wee    Zee

table2 ---Produces 1 - n rows
table2id | table1id | col1 | col2 | col3
1            1        sock   cloth  sup
2            1        bal    baa    zak
3            1         x      y    fooZ

debe verse así (lo siguiente no son nombres de columnas, son el conjunto de resultados)

Woo,wee,zee,sock,cloth,sup,bla,baaa,zak,x,y,fooZ

enter image description here

preguntado el 29 de julio de 12 a las 04:07

¿Puede proporcionar un ejemplo de los datos antes y luego cómo quiere que se vean los resultados? -

¿Qué DBMS estás usando? -

1 Respuestas

Si usa MySQL:

SELECT a.table1id, GROUP_CONCAT(a.col) AS col_values
FROM
(
    SELECT table1id, col1 col FROM table1 UNION ALL
    SELECT table1id, col2     FROM table1 UNION ALL
    SELECT table1id, col3     FROM table1 UNION ALL
    SELECT table1id, col1     FROM table2 UNION ALL
    SELECT table1id, col2     FROM table2 UNION ALL
    SELECT table1id, col3     FROM table2
) a
GROUP BY a.table1id

Demostración de SQLFiddle


Si usa el servidor SQL:

SELECT a.table1id, b.colnames
FROM table1 a
CROSS APPLY
(
    SELECT STUFF((
        SELECT ',' + aa.col
        FROM
        (
            SELECT table1id, col1 col FROM table1 UNION ALL
            SELECT table1id, col2     FROM table1 UNION ALL
            SELECT table1id, col3     FROM table1 UNION ALL
            SELECT table1id, col1     FROM table2 UNION ALL
            SELECT table1id, col2     FROM table2 UNION ALL
            SELECT table1id, col3     FROM table2
         ) aa
         WHERE aa.table1id = a.table1id
         FOR XML PATH('')
    ), 1, 1, '') AS colnames
) b

Demostración de SQLFiddle

Respondido 29 Jul 12, 05:07

sqlfiddle? Para dulce, no sabía que estaba ni en línea. Gracias - Ventanas de vinilo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.