Динамический центр SQL Server 2008 на основе порядкового значения - PullRequest
2 голосов
/ 17 мая 2011

У меня есть 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)

Могу ли я как-то адаптировать это для моего использования?

1 Ответ

1 голос
/ 22 августа 2011

Если бы у вас была таблица с именем Ordinals (или как вы хотите), содержащая числа, достаточные для покрытия максимального числа ординалов, которое вы можете получить, это может сработать для вас:* Это почти так же, как образец AW

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...