首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

|M| 求一条SQL查询话语

2011-12-24 
|M| 求一条SQL查询语句如有表tabIdnameparentID1文件02编辑03工具04剪切25新建16复制27打开18保存19初始91

|M| 求一条SQL查询语句
如有表
tab
Id     name   parentID
1       文件   0
2       编辑   0
3       工具   0
4       剪切   2
5       新建   1
6       复制   2
7       打开   1
8       保存   1
9       初始   9
10     选项   3
上面是一条多级菜单表
绑定树的时候为
文件
      新建
      打开
      保存
编辑
      剪切
      复制
工具
      选项
              初始
现在要通过SQL语句把上面的表查询排序为
Id     name   parentID
1       文件   0
5       新建   1
7       打开   1
8       保存   1
2       编辑   0
4       剪切   2
6       复制   2
3       工具   0
10     选项   3
9       初始   9
这个样子谢谢

[解决办法]
排序做什么呀,是不是最终在页面上显示呀
[解决办法]
搞不清楚你这样弄有什么实际意义?
[解决办法]
SQL的输出不可能是你需要的菜单的,这样没什么意义,另外
----------------------
9 初始 9
----------------------
改一下
[解决办法]
用SQL语句不容易实现,你无非是要构造树,可以先读入数据集,然后使用下面的函数。调用方法是:
FillTree(DataSet1.xxTable, TreeView1.Nodes, "根的父结点ID,你的是0 ", "parentID ", "ID ", "name ", "ID ", NavigetUrl, Target);
适用于框架结构,如果不是这种结构,自己改一下就是了。

/// <summary>
/// 填充树控件
/// </summary>
/// <param name= "dt "> 树控件结构所在表 </param>
/// <param name= "tns "> 节点集合 </param>
/// <param name= "strParentID "> 父节点值 </param>
/// <param name= "strParentField "> 父节点字段 </param>
/// <param name= "strSortField "> 排序字段 </param>
/// <param name= "strTextField "> 显示文本字段 </param>
/// <param name= "strValueField "> 值字段 </param>
/// <param name= "strNavigate "> 导航页 </param>
/// <param name= "strTarget "> 导航目标 </param>
public void FillTree(DataTable dt, TreeNodeCollection tns, string strParentID, string strParentField, string strSortField, string strTextField, string strValueField, string strNavigate, string strTarget)
{
TreeNode tn = null;
DataRow[] drs = dt.Select(string.Format( "{0}={1} ", strParentField, strParentID), strSortField);

foreach (DataRow dr in drs)
{
tn = new TreeNode();
tn.Text = dr[strTextField].ToString();
tn.Value = dr[strValueField].ToString();
tn.NavigateUrl = string.Format( "{0}?P={1} ", strNavigate, dr[strValueField]);
tn.Target = strTarget;
tns.Add(tn);

FillTree(dt, tn.ChildNodes, dr[strValueField].ToString(), strParentField, strSortField, strTextField, strValueField, strNavigate, strTarget);
}
}

[解决办法]
呵呵,楼主是不是想做动态控件?根据存在数据库中的数据读取出来以后程序再画出控件来?
只要在表中标示出控件所处在层次就行了


[解决办法]

[解决办法]
--借用一個函數來實現。

--建立測試環境
Create Table tab
(IDInt,
nameNvarchar(10),
ParentIDInt)
Insert tab Select 1, N '文件 ', 0
Union All Select 2, N '编辑 ', 0
Union All Select 3, N '工具 ', 0
Union All Select 4, N '剪切 ', 2
Union All Select 5, N '新建 ', 1
Union All Select 6, N '复制 ', 2
Union All Select 7, N '打开 ', 1
Union All Select 8, N '保存 ', 1
Union All Select 9, N '初始 ', 10
Union All Select 10, N '选项 ', 3
GO
--建立函數
Create Function GetParent(@ID Int)
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ', ' + Rtrim(ID), @ID = ParentID From tab Where ID = @ID
While @@ROWCOUNT > 0
Select @ID = ParentID, @S = ', ' + Rtrim(ID) + @S From tab Where ID = @ID
Return @S
End
GO
--測試
Select * From tab Order By dbo.GetParent(ID), ID
GO
--刪除測試環境
Drop Table tab
Drop Function GetParent
--結果
/*
IDnameParentID
1文件0
5新建1
7打开1
8保存1
2编辑0
4剪切2
6复制2
3工具0
10选项3
9初始10
*/

[解决办法]

[解决办法]
--借用一個函數來實現。

--建立測試環境
Create Table tab
(IDInt,
nameNvarchar(10),
ParentIDInt)
Insert tab Select 1, N '文件 ', 0
Union All Select 2, N '编辑 ', 0
Union All Select 3, N '工具 ', 0
Union All Select 4, N '剪切 ', 2
Union All Select 5, N '新建 ', 1
Union All Select 6, N '复制 ', 2
Union All Select 7, N '打开 ', 1
Union All Select 8, N '保存 ', 1
Union All Select 9, N '初始 ', 10
Union All Select 10, N '选项 ', 3
GO
--建立函數
Create Function GetParent(@ID Int)
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ', ' + Rtrim(ID), @ID = ParentID From tab Where ID = @ID
While @@ROWCOUNT > 0
Select @ID = ParentID, @S = ', ' + Rtrim(ID) + @S From tab Where ID = @ID
Return @S
End
GO
--測試
Select * From tab Order By dbo.GetParent(ID), ID
GO
--刪除測試環境
Drop Table tab
Drop Function GetParent
--結果
/*
IDnameParentID
1文件0
5新建1
7打开1
8保存1
2编辑0
4剪切2
6复制2
3工具0
10选项3
9初始10
*/
--------------------------------
顶了,学习

热点排行