У меня есть следующая консультация, которую я получаю с этим query:
Select Año, Tip, Est, t1, t2, t3 From Tabla1
Año Tip Est Zo t1 t2 t3
2003 1 A 6 12 14 17
2003 1 A 7 12 15 18
2003 1 A 8 13 16 19
2003 1 A 9 10 12 14
2003 1 A 10 12 14 17
2004 1 A 1 11 13 15
Как я могу реализовывать query, чтобы иметь результат, похожий на это?
Año Tip Est Zo Ts
2003 1 A 6 12
2003 1 A 6 14
2003 1 A 6 17
2003 1 A 7 12
2003 1 A 7 15
2003 1 A 7 18
2003 1 A 8 13
2003 1 A 8 16
2003 1 A 8 19
2003 1 A 9 10
2003 1 A 9 12
2003 1 A 9 14
То, что делается, состоит в том, чтобы размещать колонны t1, t2, t3 в линии с теми же годами, которым они принадлежат.
Как могло бы удаваться этому?
SQL Server позволяет тебе делать один UNPIVOT
, diseГ±ado именно для этой situaciГіn:
select año, tip, est, zo, ts
from tabla1
unpivot (
ts for columnas in (t1, t2, t3)
) as unpvt
order by ... -- aquí le pones las columnas que necesitas para establecer el orden deseado
Другая opciГіn интересный - та использования CROSS APPLY
:
select t.año, t.tip, t.est, t.zo, v.ts
from tabla1 t
cross apply (
values (t.t1), (t.t2), (t.t3)
) as v(ts)
order by ... -- aquí le pones las columnas que necesitas para establecer el orden deseado
В обоих случаях, результате deberГ, - чтобы быть хорошим, так как только нужно пробегать таблицу однажды.
Хотя я верю в то, что понимаю ты хочешь группировать это в единственной колонне, можешь делать это с одним union all
SELECT *
FROM
((SELECT
Año, Tip, Est, Zo, t1
FROM
Tabla1)
UNION ALL (SELECT
Año, Tip, Est, Zo, t2
FROM
Tabla1)
UNION ALL (SELECT
Año, Tip, Est, Zo, t3
FROM
Tabla1)) tabla
ORDER BY Est;
Ты должен добавлять ORDER BY
.
Тестирует следующую консультацию:
SELECT Año, Tip, Est, t1
FROM Tabla1
ORDER BY Zo