表结构一:部门表
  USE [newzb]
GO
/****** 对象:  Table [dbo].[department]    脚本日期: 02/29/2012 09:05:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[department](
[Depart_id] [varchar](200) COLLATE Chinese_PRC_CI_AS NOT NULL,
[Depart_name] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[Depar_fatherid] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,
[company_id] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]GO
SET ANSI_PADDING OFF表结构二:待办任务表
USE [newzb]
GO
/****** 对象:  Table [dbo].[daibantask]    脚本日期: 02/29/2012 09:05:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[daibantask](
[Id] [varchar](120) COLLATE Chinese_PRC_CI_AS NOT NULL,
[username] [varchar](30) COLLATE Chinese_PRC_CI_AS NULL,
[TaskTitle] [varchar](120) COLLATE Chinese_PRC_CI_AS NULL,
[ispuble] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
[zhuangtai] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
[zhucetime] [varchar](120) COLLATE Chinese_PRC_CI_AS NULL,
[Endtime] [varchar](120) COLLATE Chinese_PRC_CI_AS NULL,
[FuZeRen] [varchar](120) COLLATE Chinese_PRC_CI_AS NULL,
[Contents] [varchar](8000) COLLATE Chinese_PRC_CI_AS NULL,
[beizhu] [varchar](8000) COLLATE Chinese_PRC_CI_AS NULL,
[user_Depart_id] [varchar](120) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]GO
SET ANSI_PADDING OFF我的部门表是分上下级别的,假设我行政部,下面可能就有行政一部,行政一部下面有行政二部,一次类推,但现在我要查询行政部及行政部下面部门的待办任务信息,该怎么弄,表结构如上,求代码,多谢了

解决方案 »

  1.   

    你的Department表插入数据时应该保持这样一个规则,就是子部门的编号是在父部门编号上累加。比如
    父部门编号为01,则第一个子部门的编号为0101,第二个子部门的编号为0102,依次类推。如果你要查某个部门(id为01)及其子部门的代办事项的话:
    select * from daibantask
    where user_Depart_id like '01%'
      

  2.   

    部门ID和下级部门ID设置好就可以用关联查询查出来
    不如行政部ID是0001
    下级1,2,3部的ID规定为0001001,0001002
    查询的时候直接模糊查询部门ID是0001%就能查出所有0001部门和下属部门的ID
    用ID关联待办任务信息
      

  3.   


    我的部门id都是guid自动生成的,下级部门的父id就是上级部门的id,这样设置的
      

  4.   

    同理
    你可以讲父ID写全
    比如
    行政部门ID是1111
    行政部门1ID是2222
    行政部门1的父ID1111
    行政部门1的子部门id3333
    行政部门1的子部门父ID1111|2222
    你查询的时候查行政部门ID=1111 或 父节点like 1111%
    就可以了
      

  5.   

    你这里使用Depar_fatherid表示其父部门Id,因此要递归。你是用sql server2008吗?是的话可以使用SQL Server 2008中的CTE递归查询的,不然要自己写存储过程实现。
      

  6.   

    select t1.Depart_name,
                t2.username,
                t2.TaskTitle            
    from department t1 left join daibantask t2 on t1.Depart_id = t2.user_Depart_id where 代办任务=xx
    给个形式,希望有用
      

  7.   

    SELECT * FROM daibantask INNER JOIN department ON daibantask.user_Depart_id = department.Depart_id
    WHERE department.Depart_id = '行政部GUID' AND daibantask.zhuangtai = '待办任务'
      

  8.   

    SELECT * FROM daibantask INNER JOIN department ON daibantask.user_Depart_id = department.Depart_id
    WHERE department.Depart_id = '行政部GUID' AND daibantask.zhuangtai = '待办任务'
      

  9.   

    用C#代码发了 - -!
    不知道是不是lz想要的
    SELECT * FROM daibantask INNER JOIN department ON daibantask.user_Depart_id = department.Depart_id
    WHERE department.Depart_id = '行政部GUID' AND daibantask.zhuangtai = '待办任务'
      

  10.   


    with
    district as 
    (
        --  获得第一个结果集,并更新最终结果集
        select * from department where Depart_name= '市场部'
        union all
        --  下面的select语句首先会根据从上一个查询结果集中获得的id值来查询parent_id         
        --  字段的值,然后district就会变当前的查询结果集,并继续执行下面的select 语句
        --  如果结果集不为null,则与最终的查询结果合并,同时用合并的结果更新最终的查
        --  询结果;否则停止执行。最后district的结果集就是最终结果集。
        select a.* from department a, district b
                   where a.Depar_fatherid = b.Depart_id
    )
    select * from district
    这个实现了在SQL里面实现的递归查询,但怎么在C#后台调用
      

  11.   

    你的待办任务表[user_Depart_id]是办事员的部门Id吗?怎么长度与Depxxx表不一致阿。你这里的问题是所有资部门以及下级部门都有可能有任务,也就是先根据你的查询条件(根)列出其所有的子项,关联任务表就可以了。
      

  12.   

    不好意思没看怎么怎白。。 
    要是   父子级关系  父级  有一个  ID(自动增长)    还得有个类型他是父级别的   1
    子级  有一个  ID(自动增长)    在一个关联ID(就是得到父级的ID)   类型为2    父子级通过ID  与关联ID 联系。up.....
      

  13.   

    参考如下代码:with depList
    as
    (
    select depart_id,depart_name,depar_fatherid from department
    where depart_id='02'
    union all
    select p.depart_id,p.depart_name,p.depar_fatherid from department p 
    inner join deplist d on p.Depar_fatherid=d.Depart_id
    )
    select t.Id,t.TaskTitle,t.username from deplist d
    inner join daibantask t
    on d.Depart_id=t.user_Depart_id
      

  14.   

    where depart_id='02'这个就是你要查询的条件,depart_id随便你指定从哪个部门(根)开始。
      

  15.   

    C#里应该也可以执行。就像执行Sql语句那样。
      

  16.   

                SqlCommand myCommand = new SqlCommand("pr_diguichaxun", conn);
                myCommand.CommandType = CommandType.StoredProcedure;
                SqlParameter Depart_id = myCommand.Parameters.Add("@Depart_id", SqlDbType.NText);
                Depart_id.Value = bumenbianhao;
                 SqlDataAdapter myAdapter = new SqlDataAdapter();
                 myAdapter.SelectCommand = myCommand;             DataTable d = new DataTable();
                 myAdapter.Fill(d);             string starttime = this.Request.Form["TextBox1"].Trim();
                string endtime = this.Request.Form["TextBox2"].Trim();
                string wcrenwuSql = "select * from daibantask where " + ping + " Endtime between '" + starttime + "'and '" + endtime + "'and user_Depart_id exists '"+d+"'";
    这个有问题,上面将各个部门id查出来放在DataTable d 里面,但是后面的那个exists是不是这样写呢
      

  17.   

    引用 27 楼 lijian1007 的回复:
    C# codeSqlCommand myCommand = new SqlCommand("pr_diguichaxun", conn);
    myCommand.CommandType = CommandType.StoredProcedure;
    SqlParameter Depart_id = myComm……
    没人知道吗 
      

  18.   

    20分的帖子,结贴率还为零
    真心不想回答
    你是sql语句不会写还是C#取数据不会写?
    要是sql不会写的话,就贴点表数据,然后把你想要的结果贴出来两表连接查询
    select a.* from a inner join b on a.关联字段= b.关联字段
    and a.条件 = ' ...'