2010-06-03 5 views
0

Имя таблицы является LooupvalueПреобразование строки в столбец с использованием SQL Server 2008?

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 значение таблицы преобразования roow в колонке зависит от ptypefield

Как и

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

Это может привести к запуску http://stackoverflow.com/questions/1534959/sql-server-2005-pivoting-data-without-a-sum-count-and-dynamic-list-of-values ​​ –

+0

В вашем пример вывода, как данные в столбцах 1 и 2 относятся к столбцам 3 и 4 или 5 и 6? Я., почему «D» появляется в той же строке, что и «FL», а не 'IF'? Это случайно? – Thomas

ответ

0

В вашем примере вывода, не понятно, почему значения из столбцов 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, которая объясняет, почему получение данных, которые вы хотите, так сложно.

+0

спасибо ... Я хочу знать, как создать этот динамический запрос, например ptypefield - это некоторое время 4 или некоторое время 7 и т. Д., Поэтому я хочу создать запрос для этого .... PLZ дать мне идею .... – kanth

+0

@jaykanth - Динамические кросс-таблицы (именно то, что вы ищете) находятся за пределами основных возможностей SQL Server. Хотя это можно сделать в T-SQL, это очень громоздко и не будет работать почти так же хорошо, как если бы вы сделали это в компоненте среднего уровня, написанном чем-то вроде C# или инструментом отчетности. – Thomas