Skip to main content
replaced http://stackoverflow.com/ with https://stackoverflow.com/
Source Link
URL Rewriter Bot
URL Rewriter Bot

It`s a bit messy, but here it is.

First of all I use the rank() function to know the position (1,2 or 3) of the ErrorField. With all that, I use that number for the Pivot. You need two pivots and a join between them.

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

All this assuming you need only 3 pairs of ErrorField/ErrorValue. Otherwise, you should take a look at my response in thisthis question.

It`s a bit messy, but here it is.

First of all I use the rank() function to know the position (1,2 or 3) of the ErrorField. With all that, I use that number for the Pivot. You need two pivots and a join between them.

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

All this assuming you need only 3 pairs of ErrorField/ErrorValue. Otherwise, you should take a look at my response in this question.

It`s a bit messy, but here it is.

First of all I use the rank() function to know the position (1,2 or 3) of the ErrorField. With all that, I use that number for the Pivot. You need two pivots and a join between them.

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

All this assuming you need only 3 pairs of ErrorField/ErrorValue. Otherwise, you should take a look at my response in this question.

added 235 characters in body
Source Link
Claudia
  • 576
  • 2
  • 7

It`s a bit messy, but here it is.

First of all I use the rank() function to know the position (1,2 or 3) of the ErrorField. With all that, I use that number for the Pivot. You need two pivots and a join between them.

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

All this assuming you need only 3 pairs of ErrorField/ErrorValue. Otherwise, you should take a look at my response in this question.

It`s a bit messy, but here it is.

First of all I use the rank() function to know the position (1,2 or 3) of the ErrorField. With all that, I use that number for the Pivot. You need two pivots and a join between them.

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

It`s a bit messy, but here it is.

First of all I use the rank() function to know the position (1,2 or 3) of the ErrorField. With all that, I use that number for the Pivot. You need two pivots and a join between them.

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

All this assuming you need only 3 pairs of ErrorField/ErrorValue. Otherwise, you should take a look at my response in this question.

Source Link
Claudia
  • 576
  • 2
  • 7

It`s a bit messy, but here it is.

First of all I use the rank() function to know the position (1,2 or 3) of the ErrorField. With all that, I use that number for the Pivot. You need two pivots and a join between them.

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