Seleccionar dinámicamente una columna
Frecuentes
Visto 81 veces
0
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.
1 Respuestas
2
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 sql-server tsql or haz tu propia pregunta.
¿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? - DaveH
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. - Paul Kar.
Entonces haz un
select..., coalesce(t.event_name, (case when... when...else end)
- Raphaël AlthausEntonces, ¿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? - Paul Kar.
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. - Raphaël Althaus