Seleccionar dinámicamente una columna

Tengo un SELECT declaración y me gustaría usar el resultado de una de las columnas en otra SELECT .

Ejemplo:

SELECT t.day, t.hour, 
    CASE t.event_name IS NULL
    THEN (SELECT t.day --I would like to select on a day(ie the value of t.day)
          FROM   other_events)
    ELSE t.event_name
    END as Event_Name
FROM   event_t t

other_event es una tabla y las columnas son días; entonces si no tengo event in event_t, lo tendré en other_event bajo ese día específico.

Por supuesto, esto no funcionará y me preguntaba si es posible en T-SQL.

preguntado el 12 de junio de 12 a las 20:06

¿existirá la fila en event_t O en other_events, pero nunca en ambos? Si ese es el caso, ¿podría usar una UNIÓN? -

sí lo hará Pensé en usar uniones o declaraciones de casos múltiples (si es lunes, entonces, si es martes, entonces...) pero me preguntaba si hay algo más corto. -

Entonces haz un select..., coalesce(t.event_name, (case when... when...else end) -

Entonces, ¿no hay un camino más corto? ¿No puedo usar el valor de t.day como la columna que quiero seleccionar en la segunda declaración de selección? -

Bueno, CTE podría ayudar, pero entonces, ¿por qué no hacer una vista basada en la tabla other_event (lo mismo, es simplemente "permanente")? Porque el CTE (o la VISTA) tendrá la misma lógica (7 UNION o CASE WHEN) dentro de la consulta o en el CTE, que no cambia mucho. Si está en una vista, se "deporta" y la consulta parece simple. Depende de la necesidad. -

1 Respuestas

Si todos los días que desea están en la primera tabla, esto debería funcionar:

SELECT t1.day,
       t1.hour,
       COALESCE(t1.event, t2.event) AS event
FROM   event_t t1
       LEFT OUTER JOIN other_events t2
                    ON t1.day = t2.day  

Respondido el 12 de junio de 12 a las 21:06

Esto es lo que pensé, pero no estoy seguro de que esa sea la condición para el JOIN (OP no está claro). También, COALESCE(t1.event, t2.event) AS event podría reemplazar CASE... - bfavaretto

Anotado y actualizado. Sí, es difícil saber con certeza si todos los días están incluidos en la primera tabla o en qué se debe unir: Jimdrang

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