У меня есть UDF, который разделяет символьную строку, разделенную пробелом. Поскольку функция перебирает каждую строку, если находит пробел и выполняет разбиение, порядковый номер вставляется в таблицу результатов в ее собственном столбце вместе со строкой разделения. Я повернул этот порядковый номер, но, конечно, эти числа меняются в зависимости от строки символов. Мне нужно запросить эти порядковые номера и использовать их в моей оси. Может кто-нибудь показать мне, как это можно сделать с помощью динамического SQL? Я видел примеры на разных форумах, но я думаю, что это может быть проще, чем то, что я видел. Моя процедура ниже. Если кому-то понадобится UDF, я тоже его опубликую.
--The original data is pulled from column "DataString" in "MyData" table.
--After declaring the UDF split function the function is used and the results are
--inserted into a table called "ScriptResult" with this query
SELECT *
INTO ScriptResult
FROM
MyData x
CROSS APPLY
dbo.Split (x.DataString, ' ') S
Where rtrim(s.StringValue) != ''
--Then the table is pivoted on column Ordinal from table ScriptResult to summarize the data
Select *
INTO ScriptPivot
From ScriptResult
pivot (max (StringValue) for Ordinal in ([1], [2], [3], [5], [7], [8], [9], [10], [11]))
as PivotResult
Пример ввода:
R 456 ACCOUNT 56779900 23499000800973983989883 56 99750927 890-0983
Y 123M 120 M/Y JOHN DOE E 5678873940000056 000000 0003456 678-7898
U 06 000000 000567 000000000000000000M688399000 789-8388
H 120 785-7848
R 456 0000000000000000000006578 786936689663 DTY578 568-7890
Я беру старый плоский файл и разрабатываю его в sql. Проблема в том, что пакетный процесс, который создает эти файлы, имеет только 120 строк символов без нормализации и т. Д. Я пытаюсь получить их на Sql Server. Я полагаю, я мог бы сделать это проще с помощью мастера импорта, но мне нужен Stor.Proceedure, потому что эти квартиры все еще используются, и это нужно будет делать ежедневно.
Желаемый результат: Сводная таблица, которую я имею, - это результат, который мне нужен, но мне просто нужно иметь возможность использовать его для всех строк данных, которые я получаю, и ни одна из них не является одинаковой, поэтому порядковые номера различаются.
Но так это должно выглядеть ...
1---2---3-------5--------7----------8-------------9--10-----------11
R 456 ACCOUNT 56779900 2349900080 0973983989883 56 99750927 890-0983
Вот пример динамической сводной таблицы из базы данных приключенческих работ ...
ОБЪЯВИТЬ @PivotColumnHeaders VARCHAR (МАКС.)
SELECT @PivotColumnHeaders =
COALESCE (
@PivotColumnHeaders + ', [' + cast (Имя как varchar) + ']',
'[' + cast (Имя как varchar) + ']'
)
ОТ Sales.SalesTerritory
DECLARE @PivotTableSQL NVARCHAR(MAX)
SET @PivotTableSQL = N'
SELECT *
FROM (
SELECT
YEAR(H.OrderDate) [Year],
T.Name,
H.TotalDue
FROM Sales.SalesOrderHeader H
LEFT JOIN Sales.SalesTerritory T
ON H.TerritoryID = T.TerritoryID
) AS PivotData
PIVOT (
SUM(TotalDue)
FOR Name IN (
' + @PivotColumnHeaders + '
)
) AS PivotTable
'
EXECUTE(@PivotTableSQL)
Могу ли я как-то адаптировать это для моего использования?