У меня есть табличная функция, в основном функция типа split, которая возвращает до 4 строк на строку данных.
Итак, я запускаю:
select * from dbo.split('a','1,a15,b20,c40;2,a25,d30;3,e50')
Я получаю:
Seq Data
1 15
2 25
Однако мои конечные данные должны выглядеть следующим образом:
15 25
, поэтому я делаю сводку.
select [1],[2],[3],[4]
from dbo.split('a','1,a15,b20,c40;2,a25,d30;3,e50')
pivot (max(data) for seq in ([1],[2],[3],[4]))
as pivottable
, которая работает, как и ожидалось:
1 2
--- ---
15 25
ОДНАКО, это здорово для одного ряда.Теперь мне нужно сделать это для нескольких сотен записей одновременно.Я думал сделать CROSS APPLY, но не уверен, как объединить CROSS APPLY и PIVOT.
(да, очевидно, что простой ответ - написать модифицированную версию, которая возвращает 4 столбца, но это не очень хороший вариант по другим причинам)
Любая помощь очень ценится.
И причина, по которой я это делаю: текущий запрос использует скалярную версию SPLIT, вызываемую 12 раз в одном и том же SELECT для одного и того же миллиона строк (где строка данных составляет 500+ байтов).
Насколько я знаю, это потребовало бы сканирования тех же 500 байтов * 1000000 строк, 12 раз.