Как я могу конвертировать ниже с помощью PIVOTИспользование PIVOT в SQL Server
alt text http://img689.imageshack.us/img689/4445/actualb.jpg
в
alt text http://img710.imageshack.us/img710/3482/pivot.jpg
Благодарности
Как я могу конвертировать ниже с помощью PIVOTИспользование PIVOT в SQL Server
alt text http://img689.imageshack.us/img689/4445/actualb.jpg
в
alt text http://img710.imageshack.us/img710/3482/pivot.jpg
Благодарности
Это немного грязно, но вот оно.
Прежде всего, я использую функцию rank(), чтобы знать положение (1,2 или 3) ErrorField. Со всем этим я использую это число для Pivot. Вам нужно два шарнира и соединение между ними.
WITH AuxTable (Data_Error_Key, ErrorField, ErrorValue, NumeroError)
AS
(
SELECT Data_Error_Key, ErrorField, ErrorValue, RANK() OVER (PARTITION BY Data_Error_Key ORDER BY Data_Error_Key, ErrorField)
FROM dbo.TempTable
)
SELECT TablaErrorField.Data_Error_Key, ErrorField1, ErrorValue1,ErrorField2,ErrorValue2, ErrorField3,
ErrorValue3
FROM
(
SELECT Data_Error_Key, [1] as ErrorField1, [2] as ErrorField2, [3] as ErrorField3
FROM (
SELECT Data_Error_Key,NumeroError, ErrorField
FROM AuxTable) P
PIVOT
(
MAX (ErrorField)
FOR NumeroError IN ([1], [2], [3])
) AS pvt) As TablaErrorField
INNER JOIN
(
SELECT Data_Error_Key, [1] as ErrorValue1, [2] as ErrorValue2, [3] as ErrorValue3
FROM (
SELECT Data_Error_Key,NumeroError, ErrorValue
FROM AuxTable) P
PIVOT
(
MAX (ErrorValue)
FOR NumeroError IN ([1], [2], [3])
) AS pvt) as TablaErrorValue
ON TablaErrorField.Data_Error_Key= TablaErrorValue.Data_Error_Key
Все это предполагает, что вам нужно всего 3 пары ErrorField/ErrorValue. В противном случае вы должны взглянуть на мой ответ в вопросе this.
Я не знаю, если вы можете сделать это с функция PIVOT SQL Server. Эта функция всегда предполагает и требует какой-то агрегатной функции (COUNT, AVG) для числового значения - вы не можете просто переносить строки в столбцы.
В вашем случае, если вы знаете, ваши поля ошибок заранее, вы могли бы сделать что-то вроде этого:
SELECT
ErrorKey,
[Field1] AS Field1, [Field2] AS Field2, [Field10] AS Field10,
[Field11] AS Field11, [Field13] as Field13, [Field14] as Field14,
[Field15] as Field15, [Field21] as field21
FROM
(SELECT ErrorKey, ErrorField, ErrorValue
FROM Errors) e
PIVOT
(
COUNT (ErrorValue)
FOR ErrorField IN
([Field1], [Field2], [Field10], [Field11], [Field13],
[Field14], [Field15], [Field21])
) AS pvt
ORDER BY pvt.ErrorKey
Это будет производить выходной что-то вроде этого:
ErrorKey Field1 Field2 Field10 Field11 Field13 Field14 Field15 field21
1 1 1 1 0 0 0 0 0
2 0 0 0 1 1 1 0 0
3 0 0 0 0 0 0 1 1
Это дало бы вы подсчитываете ошибку в конкретном поле для каждого ключа ошибки.