动态ASP.Net表的TSQL分组和排序

时间:2010-06-07 20:23:23

标签: asp.net sql tsql

我希望有人可以指出我正确的方向......

基本上我正在编写一个asp.net Web控件,根据存储在数据库中的字段数据动态显示一组数据。

我希望控件从数据库中的一组数据创建一个动态asp表,但是我无法理解将数据排序到我可以创建htmltable的列表所需的查询(如果这样做义)

我的数据看起来像这样,我有一个字段名称,相应控件将被提供的顺序,以及控制在asp表中占用的列数:

Id | FieldName | ColumnSpan |订单......
-----------------------------------------
1 |用户名| 1 | 1
2 | FirstName | 1 | 3
3 |姓氏| 1 | 4
4 |电邮地址| 2 | 2
5 | DOB | 1 | 5
6 |备注| 2 | 7
7 |密码| 1 | 6
8 |用户ID | 1 | 0

我已经尝试了一些创建存储过程的尝试,该存储过程接受表示表将具有的列数的整数,但没有真正的进展。我希望查询返回类似下面的内容(如果输入参数是2(列)) - 其中字段被分组为逻辑行

行| FieldName |为了
------------------------------------
1 | UserId | 0
1 |用户名| 1
2 |电邮地址| 2
3 | FirstName | 3
3 |姓氏| 4
4 | DOB | 5
4 |密码| 6
5 |备注| 7

如果这些漫画对任何人都有意义,我会很感激任何指导......

干杯 kmoo01

1 个答案:

答案 0 :(得分:0)

This works for 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]