Я видел несколько ответов на это, но никто, кажется, соответствуютPivot в T-SQL без агрегирования или точного соответствия колонок
У меня есть большой БД с большим количеством таблиц, которые по существу являются такими же, как друг с другом - однако в какой-то момент в прошлом новые столбцы были добавлены/переименованы/удалены.
Я пытаюсь использовать INFORMATION_SCHEMA.COLUMNS, чтобы получить список столбцов для каждой целевой таблицы, но в сводном формате - поэтому имя таблицы находится сверху и ординальное положение в виде строк.
С помощью этих таблиц
CREATE TABLE tbl1 (
Id int
, Code int
, GroupName varchar(25)
, Amount money
, OutstandingAmount money
, DataDate date
)
ON [PRIMARY]
CREATE TABLE tbl2 (
Id int
, Code int
, CompanyName varchar(25)
, CompanyRegistrationDate date
, Amount money
, OutstandingAmount money
, DataDate date
)
ON [PRIMARY]
CREATE TABLE tbl3 (
Id int
, Code int
, CustomerId varchar(10)
, CustomerName varchar(25)
, Amount money
, OutstandingAmount money
, DataDate date
)
ON [PRIMARY]
Тогда следующий запрос получает меня данные, и я могу с & р в первенствует выстраиваться колонны.
select
c.ORDINAL_POSITION
, c.TABLE_NAME
, c.COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS c
WHERE TABLE_NAME LIKE 'tbl%'
ORDINAL_POSITION TABLE_NAME COLUMN_NAME
1 tbl1 Id
2 tbl1 Code
3 tbl1 GroupName
4 tbl1 Amount
5 tbl1 OutstandingAmount
6 tbl1 DataDate
1 tbl2 Id
2 tbl2 Code
3 tbl2 CompanyName
4 tbl2 CompanyRegistrationDate
5 tbl2 Amount
6 tbl2 OutstandingAmount
7 tbl2 DataDate
1 tbl3 Id
2 tbl3 Code
3 tbl3 CustomerId
4 tbl3 CustomerName
5 tbl3 Amount
6 tbl3 OutstandingAmount
7 tbl3 DataDate
Однако, в действительности есть 100 из таблиц (система создана) так с & р не очень разумный вариант.
Моя проблема также в том, что количество столбцов является непоследовательным.
Я пробовал стержень, но не могу разобраться, на что поворот! Я пытаюсь добиться этого ...
ORDINAL_POSITION tbl1 tbl2 tbl3
1 Id Id Id
2 Code Code Code
3 GroupName CompanyName CustomerId
4 Amount CompanyRegistrationDate CustomerName
5 OutstandingAmount Amount Amount
6 DataDate OustandingAmount OustandingAmount
7 NULL DataDate DataDate
Если он собирается возвращать неизвестное количество таблиц, то вы не можете записать его как простой стержень, так как любой заданный запрос должен возвращать фиксированный набор столбцов. Вам нужно будет построить запрос динамически. –