select PeopleName,
(select Count(*) from WaitVisitInfo_VisitDetail where 
Name in (PeopleName)) as OprtCount  from Oprt_Info a left join WaitVisitInfo_VisitDetail b  on a.Oprt_ID = b.WVI_TaskOprtID
把PeopleName 做为  后边统计数量的条件,该如何实现?

解决方案 »

  1.   

    select PeopleName,count(1) as OprtCount  from Oprt_Info a left join WaitVisitInfo_VisitDetail b  on a.Oprt_ID = b.WVI_TaskOprtID
      

  2.   

    是我弄错了,原SQL语句是这样:
    select OprtName,(select count(*) from tableC where Name = OprtName) as OprtCount
    tableA a left join tableB on tableA.ID = tableB.IDName 字段中有多个值以逗号形式分开,例如:张三,李四,王五    这样的
    这该如何处理呢?
      

  3.   

    我知道是我们的表设计的不合理,但是目前就这样的,
    select OprtName,(select count(*) from tableC where Name = OprtName) as OprtCount
    tableA a left join tableB on tableA.ID = tableB.IDtableC 中的Name字段可以存多个值就是我刚才说的那些,这该筛选和处理呢,求助。
      

  4.   

    select OprtName,(select count(*) from tableC where Name = OprtName) as OprtCount
    tableA a left join tableB on tableA.ID = tableB.ID这条语句能否实现?求助各位了。
      

  5.   

    你的表关系没看太懂,想统计每个name的数量可以用group by分组select 
      OprtName,
      count(*)
    from
      tableC
    group by
      OprtName
      

  6.   

    这里面涉及到三张表,A表与B表进行链表,然后根据晒出的字段,查询C表的一些数据
    最后筛选结果为  筛选出的姓名,和从C表中根据姓名查询得到的数量。
      

  7.   

    因为tableC 表中的Name 字段可能有多个值,这还能进行group 吗?
      

  8.   

    多个值得意思是说例如:ID   Name
     1   张三
     2   李四,王五
     3   赵六,陈七,马八
    这就不能在用Group 了吧?
      

  9.   

    select OprtName,(select count(*) from tableC where Name = a.OprtName) as OprtCount
    From tableA a left join tableB on tableA.ID = tableB.ID
      

  10.   

    这位大哥,这个Name有时候为多个的情况也可以这样吗?到是可以出结果。
      

  11.   

    select [Name],count(*) as OprtCount from tableC 
      where [Name] in (select OprtName from tableA a left join tableB on tableA.ID = tableB.ID )至于你说的多个姓名,没太明白具体的表结构,因为牵扯三个表
      

  12.   

      select a.PeopleName,count(b.Name) from Oprt_Info a left join WaitVisitInfo_VisitDetail b on a.Oprt_ID = b.WVI_TaskOprtID group by b.Name这样试试 是否可以 没有验证错误
      

  13.   

    这种统计记录数量的一般避免不了group byselect
     tmp.name,
     count(×)
    from
     (select a.name from tableA a left ion tableB b on a.Id = b.Id) tmp
    join
     tableC c
    on
      charindex(tmp.name, c.name) > 0
    group by
      tmp.name是不是这个意思?
      

  14.   

    第三个表肯定要连接进来,关键是你说的从A和B里查询出一些字段,查出来的是什么字段,如何根据这些字段如何连接C表,c的name是多个人名不是啥问题,如果仅仅是根据A或者B里的name看c里边包含name的记录有多少条,那就是上边的写法,还有A和B里有没有name,A和B里name是多个人还是一个人,你是要统计多个人的还是一个人的
      

  15.   

    11楼正解啊,如果a.OprtName 就是tableA的oprtName字段如果也是多个值的情况那11楼的完全可以得到结果,如果不一样可以试试:
    select OprtName,(select count(*) from tableC where charindex(a.OprtName, Name) > 0) as OprtCount
    From tableA a left join tableB on tableA.ID = tableB.ID 
    结果出来给我点分哦,来挣分的哦...
      

  16.   

    嗯,我就这么说吧:
    select OprtName,(select count(*) from tableC where Name in (OprtName)) as OprtCount
    tableA a left join tableB on tableA.ID = tableB.IDtableA  是一个基础表,里面存储所有的人员姓名。
    tableC  是一个人员做单据的记录表。
    tableB  是tableC下的一个表。tableC中的一条记录可以对应tableB 中多条记录
    我的目的就是为了,筛选出 tableA 所有人员所做单据的数量。===============================================
    tableA  表结构大致为:ID  Name
    1   张三
    2   李四
    3   王五
    tableC 表结构大致为:
    TaskID    OprtID        Name
    100001    1,2      张三,李四
    100002    2,3      李四,王五
    100003    1,2,3    张三,李四,王五tableB  表结构大致为:
    ID     TaskID    OprtID      Name
     1     100001       1        张三
     2     100001       2        李四
     3     100002       2        李四
     4     100002       3        王五
     5     100003       1        张三
     6     100003       2        李四
     7     100003       3        王五
    ===============================================
    而他们的关系比较复杂,
    tableC  中的Name字段 可以有多个人员姓名
    最后结果想要这种:姓名     tableC数量      tableB数量
    张三         5               10
    李四         4               17
    王五         3               18
    ===============================================
    各位同仁可以讨论下,看能否实现。
      

  17.   

    了解了,实际上table B 和table C是等价的,所以人员在table B中的数量和在table C中的数量是一样的,如果你非要从两个表都查询一次的话也不是不行select
     A.name
     count(B.Id),
     count(C.TaskId)
    from
     A
    left join B on A.Id = B.OprtId
    left join C on charindex(A.Id, C.OprtId) > 0
    group by
      A.name那个Id如果不是字符的话可能需要类型转换
      

  18.   

    貌似count里边应该有distinct, count(distint B.Id), count(distinct C.TaskId)
      

  19.   

    try
    select a.Name,count(distinct c.taskid)tableC数量,count(distinct b.id)tableB数量 from tba a left join tbb b on
    a.id=b.oprtid join tbc c on charindex(','+b.name+',',','+replace(c.name,',',',')+',')>0 group by a.name
      

  20.   

    上面掉了个leftselect a.Name,count(distinct c.taskid)tableC数量,count(distinct b.id)tableB数量 from tba a left join tbb b on
    a.id=b.oprtid left join tbc c on charindex(','+b.name+',',','+replace(c.name,',',',')+',')>0 group by a.name
      

  21.   

    Select name as [姓名],
    (Select count(1) as [tablec数据] From tablec WHere (","+ name +",") like ("%,"+a.name +",%")),
    (Select count(1) as [tableb数据] From tableb WHere name=a.name)
    From tablea a如果tablec的name为ntext\text\nvarchar(max)就得考虑用全文索引了CONTAINS(name,a.name)
      

  22.   

    不好意思,标点符号的问题,已经解决了,非常感谢 liuchaolin。我会在追加一些分的
      

  23.   

    tablec根本就不需要,b表根据人名统计任务数不就行了