Отключить запрос T- SQL с ручным соединением столбцов - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь минимизировать строки кода для этого:

Таблица:

Date1      Date2      Date3
12/03/2019 13/05/2019 01/03/2020
04/05/2018 17/06/2019 07/04/2020

....

Отсюда я пишу запрос с объединениями, который выглядит следующим образом:

select 'Date1' as ColumnName,
       'This date is for something1' as ColumnMeaning
        max(Date1) as ColumnMax
from tableName
union
select 'Date2' as ColumnName,
       'This date is for something2' as ColumnMeaning
        max(Date2) as ColumnMax
from tableName
union
select 'Date3' as ColumnName,
       'This date is for something3' as ColumnMeaning
        max(Date3) as ColumnMax
from tableName

Я хочу минимизировать этот код, поскольку в нем около 30 столбцов даты, и это делает код бессмысленно громоздким. Я пробовал оператор unpivot , но проблема в том, что я не могу скопировать столбец ColumnMeaning .

Есть ли способ эффективно достичь этого?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Одна альтернатива будет apply:

select dates, colname, colsomething, max(dates) as colmax
from table t cross apply
     ( values (t.date1, 'date1', 'This date is for something1'),
               . . .
              (t.date30, 'date130', 'This date is for something30')
     ) tt(dates, colname, colsomething);
group by colname, colsomething;
0 голосов
/ 07 апреля 2020

Хммм. , , Похоже, вам нужны данные в строках, а не в столбцах. Вы можете использовать агрегирование после отмены:

select v.colname, v.colsomething, max(thedate)
from table t cross apply
     ( values (t.date1, 'date1', 'This date is for something1'),
               . . .
              (t.date30, 'date130', 'This date is for something30')
     ) v(thedate, colname, colsomething)
group by v.thedate, v.colsomething;

Если производительность является проблемой, агрегирование перед использованием cross apply более эффективно.

...