Преобразовать строку в столбец с помощью SQL Server 2008? - PullRequest
0 голосов
/ 03 июня 2010

Имя таблицы равно Looupvalue

id Ptypefield Value
1   1   D
2   1   E
3   1   F
4   1   G
5   1   H
6   2   FL
7   2   IF
8   2   VVS1
9   2   VVS2
10  2   VS1
11  2   VS2
12  3   0.50
13  3   1.00
14  3   1.50
15  3   2.00
16  4   Marquise
17  4   Round
18  4   Pear
19  4   Radiant
20  4   Princess

Значение таблицы Lookupvalue преобразовать строку в столбец зависит от поля ptype

Как

id  1  id   2      id   3     id   4
1   D   6   fl      12 0.50    16   Marquise  
2   E   7   If      13  1      17    Round....   
3   F   8   vvs2    14  1.5
4   G   9   vvs2     15 2
5   H   10  vs1
        11   vs2 

Спасибо

1 Ответ

0 голосов
/ 03 июня 2010

В вашем примере выходных данных не ясно, почему значения из столбцов 1 и 2 будут связаны с столбцами 3 и 4. Однако вот возможное решение:

;With RowNumbers As
    (
    Select Id, PTypeField, Value
        , Row_Number() Over( Partition By PTypeField Order By Id ) As Rownum
    From #Test
    )
Select RowNum
    , Min( Case When PTypeField = 1 Then Id End ) As Id
    , Min( Case When PTypeField = 1 Then Value End ) As [1]
    , Min( Case When PTypeField = 2 Then Id End ) As Id
    , Min( Case When PTypeField = 2 Then Value End ) As [2]
    , Min( Case When PTypeField = 3 Then Id End ) As Id
    , Min( Case When PTypeField = 3 Then Value End ) As [3]
    , Min( Case When PTypeField = 4 Then Id End ) As Id
    , Min( Case When PTypeField = 4 Then Value End ) As [4]
From RowNumbers
Group By RowNum

Если вы хотите динамически генерировать столбцы, единственный способ сделать это в SQL - это использовать неаккуратный динамический SQL. T-SQL не был разработан для такого рода выходных данных, и вместо этого вам следует использовать инструмент создания отчетов или выполнять перекрестную привязку в компоненте или классе среднего уровня.

Эта схема данных выглядит как EAV, которая объясняет, почему получение данных, которые вы хотите, так сложно.

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