Группировка и упорядочение TSQL для динамической таблицы ASP.Net - PullRequest
1 голос
/ 08 июня 2010

Я надеюсь, что кто-то может указать мне правильное направление для этого ...

По сути, я пишу веб-элемент управления asp.net для динамического отображения набора данных, основанных на полевых данных, хранящихся вбаза данных.

Я хочу, чтобы элемент управления создавал динамическую таблицу asp из набора данных из базы данных, однако я не могу разобраться с запросом, необходимым для упорядочения данных в список, в котором я могу создать htmltablefrom (если это имеет смысл)

мои данные выглядят так, где у меня есть имя поля, порядок, в котором будет отображаться соответствующий элемент управления, и количество столбцов, которые этот элемент управления занимает в таблице asp:

Id |FieldName |ColumnSpan |Порядок ...-----------------------------------------1 |Имя пользователя |1 |12 |FirstName |1 |33 |Фамилия |1 |44 |Адрес электронной почты |2 |25 |ДОБ |1 |56 |Примечания2 |77 |Пароль |1 |68 |UserID |1 |0

Я предпринял пару попыток создания хранимой процедуры, которая принимает целое число, представляющее число столбцов в таблице, без реального прогресса.Я хотел бы, чтобы запрос возвращал что-то вроде следующего (если входной параметр был 2 (столбцы)) - где поля сгруппированы в логические строки

row |FieldName |порядок------------------------------------ 1 |UserId |0 1 |Имя пользователя |1 2 |Адрес электронной почты |2 3 |FirstName |3 3 |Фамилия |4 4 |ДОБ |5 4 |Пароль |6 5 |Примечания7

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

Cheers kmoo01

1 Ответ

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

Это работает для 2 , но не для 3 (потому что он недостаточно умен, чтобы правильно обрабатывать остаток)

-- SO2992861
DECLARE @width AS int = 2
DECLARE @t AS TABLE (Id int, FieldName varchar(15), ColumnSpan int, [Order] int)
INSERT INTO @t
VALUES (1, 'UserName', 1, 1)
 ,(2, 'FirstName', 1, 3)
 ,(3, 'LastName', 1, 4)
 ,(4, 'Email Address', 2, 2)
 ,(5, 'DOB', 1, 5)
 ,(6, 'Notes', 2, 7)
 ,(7, 'Password', 1, 6)
 ,(8, 'UserID', 1, 0)

SELECT Row, FieldName, [Order]
FROM(
    SELECT l.FieldName
        ,l.ColumnSpan
        ,l.[Order]
        ,SUM(r.ColumnSpan) AS RunningTotal
        ,SUM(r.ColumnSpan) / @width + CASE WHEN SUM(r.ColumnSpan) % @width <> 0 THEN 1 ELSE 0 END AS Row
    FROM @t AS l
    LEFT JOIN @t AS r
        ON r.[Order] <= l.[Order]
    GROUP BY l.FieldName, l.ColumnSpan, l.[Order]
) AS X
ORDER BY [Order]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...