2014-02-13 3 views
-1

мне нужно сетки данных в моем UI следующего видаMSSQL запроса для извлечения данных из БД

 | Col1 | Col2 | Col3 | Col4 | 
-------------------------------------- 
     |  |  |  |  | 
Row1 | 10 | 20 | 30 | 40 | 
     |  |  |  |  | 
Row2 | 50 | 60 | 70 | 80 | 
     |  |  |  |  | 
Row3 | 90 | 100 | 110 | 120 | 
     |  |  |  |  | 
Row4 | 130 | 140 | 150 | 160 | 

Схема вышеуказанного DataGrid хранится в БД, как

Таблица T1

ID | Description | DimensionType 
------------------------------------------- 
101 |  Row1  |  1 
102 |  Row2  |  1 
103 |  Row3  |  1 
104 |  Row4  |  1 
105 |  Col1  |  2 
106 |  Col2  |  2 
107 |  Col3  |  2 
108 |  Col4  |  2 

В приведенной выше таблице DimensionType обозначает, является ли описание строкой или столбцом. DimensionType = 1 средства row и DimensionType = 2 средства column.

Значения, хранящиеся в БД являются

Таблица T2

ID | T1R | T1C | Value 
---------------------------------- 
1001 | 101 | 105 | 10 
1002 | 101 | 106 | 20 
1003 | 101 | 107 | 30 
1004 | 101 | 108 | 40 
1005 | 102 | 105 | 50 
1006 | 102 | 106 | 60 
1007 | 102 | 107 | 70 
1008 | 102 | 108 | 80 
. 
. 
. 
an so on. 

Я хотел бы получить данные в следующем виде.

Row | C1 | Value | C2 | Value | C3 | Value | C4 | Value | 
-------------------------------------------------------------------------------------------- 
     |   |   |   |   |   |   |   |   | 
    Row1 | Col1 | 10 | Col2 | 20 | Col3 | 30 | Col4 | 40 | 
    Row2 | Col1 | 50 | Col2 | 60 | Col3 | 70 | Col4 | 80 | 
    Row3 | Col1 | 90 | Col2 | 100 | Col3 | 110 | Col4 | 120 | 
    Row4 | Col1 | 130 | Col2 | 140 | Col3 | 150 | Col4 | 160 | 
     |   |   |   |   |   |   |   |   | 

Необходимо написать запрос, который может печатать данные в вышеуказанном формате (в MSSQL). Если поиск может быть дополнительно оптимизирована было бы еще более полезным, то есть, в виде

Row | Col1 | Col2 | Col3 | Col4 | 
-------------------------------------------------- 
     |   |   |   |   | 
    Row1 |  10 | 20 | 30 | 40 | 
    Row2 |  50 | 60 | 70 | 80 | 
    Row3 |  90 | 100 | 110 | 120 | 
    Row4 | 130 | 140 | 150 | 160 | 
     |   |   |   |   | 

Спасибо заранее !!

+0

Будет ли только когда-либо восемь столбцов или столбцы могут увеличиваться на неопределенный срок? Это просто проблема с кросс-таблицей, и это обычно лучше всего решать в пользовательском интерфейсе, а не в базе данных. –

+0

no может быть любое количество столбцов ... и отображение в пользовательском интерфейсе еще не сделано ... Результат пользовательского интерфейса должен быть достигнут с помощью двух таблиц. – SohamC

+0

Я не вижу связи между 'Row1' и' Col1'. Я думаю, что дизайн T2 не прав. Вместо этого это должно быть: 'ID | T1IDRow | T1IDCol | Value' или что-то вроде этого. – valex

ответ

0

непроверенная, но попробовать это (у меня нет MS SQL передо мной и не работал в нем, по крайней мере, один год, так что этот код был написан вслепую):

select t2id, t2t1r, t2t1c, rdesc, 
    STUFF((SELECT ', ' + Value from t ttemp where ttemp.t2t1r = t.t2t1r FOR XML PATH('')), 1, 2, '') as ConcatenatedValues, 
    STUFF((SELECT ', ' + cdesc from t ttemp where ttemp.t2t1r = t.t2t1r FOR XML PATH('')), 1, 2, '') as cdescs, 
from 
(select T2.ID as t2id, T2.T1R as t2t1r, T2.T1C as t2t1c, Value, row.Description as rdesc, col.Description as cdesc 
from T1 join T2 row 
on T1.ID = row.T1R and row.DimensionType = 1 
join T2 col 
on T1.ID = col.T1C and col.DimensionType = 2) t 
Смежные вопросы