现有一个表T,表中有字段 Name,D/N,F/T,Y/N;没有主键,字段D/N只有D和N两种数据,字段F/T与字段Y/N雷同于字段D/N;
现有3个计数统计查询
SELECT Name,[D/N],Count([D/N]) as 计数1
FROM T
GROUP BY Name,[D/N];SELECT Name,[D/N],[F/T],Count([F/T]) as 计数2
FROM T
WHERE ([F/T]='T')
GROUP BY Name,[D/N],[F/T];SELECT Name,[D/N],[Y/N],Count([Y/N]) as 计数3
FROM T
WHERE ([Y/N]='Y')
GROUP BY Name,[D/N],[Y/N];现在想把这3个查询并成单个查询,输出结果:
标题行: Name D/N 计数1 计数2 计数3
  1 D 0 0 0
  1 N 0 0 0
  2 D 0 0 0
  2 N 0 0 0
  . . . . .
  . . . . .
  . . . . .计数项如果为0,最好显示出来,不显示也要紧

解决方案 »

  1.   

    select m.name,m.[D/N],
           isnull((select count(1) from t where [D/N] = m.[D/N]),0) 计数1,
           isnull((select count(1) from t where [D/N] = m.[D/N] and [F/T] = m.[F/T]),0) 计数2,
           isnull((select count(1) from t where [D/N] = m.[D/N] and [Y/N] = m.[Y/N]),0) 计数3
    from t
    group by m.name,m.[D/N]
      

  2.   

    select m.name,m.[D/N],
           isnull((select count(1) from t where [D/N] = m.[D/N]),0) 计数1,
           isnull((select count(1) from t where [D/N] = m.[D/N] and [F/T] = m.[F/T]),0) 计数2,
           isnull((select count(1) from t where [D/N] = m.[D/N] and [Y/N] = m.[Y/N]),0) 计数3
    from t
    group by m.name,m.[D/N]--orselect isnull(isnull(t1.name , t2.name),t3.name) name , 
           isnull(isnull(t1.[D/N],t2.[D/N]),t3.[D/N]) [D/N],
           isnull(t1.计数1,0) 计数1,
           isnull(t2.计数2,0) 计数2,
           isnull(t3.计数3,0) 计数3
    from
    (
    SELECT Name,[D/N],Count([D/N]) as 计数1
    FROM T
    GROUP BY Name,[D/N];
    ) t1
    full join 
    (
    SELECT Name,[D/N],[F/T],Count([F/T]) as 计数2
    FROM T
    WHERE ([F/T]='T')
    GROUP BY Name,[D/N],[F/T];
    ) t2 on t1.name = t2.name and t1.[D/N] = t2.[D/N]
    full join
    (
    SELECT Name,[D/N],[Y/N],Count([Y/N]) as 计数3
    FROM T
    WHERE ([Y/N]='Y')
    GROUP BY Name,[D/N],[Y/N];
    ) t3
    on isnull(t1.name , t2.name) = t3.name and isnull(t1.[D/N],t2.[D/N]) = t3.[D/N]
      

  3.   

    select m.name,m.[D/N],
    这里的m,指那个表?要建一个表m吗
      

  4.   

    漏写了表别名,应该为:select m.name,m.[D/N],
           isnull((select count(1) from t where [D/N] = m.[D/N]),0) 计数1,
           isnull((select count(1) from t where [D/N] = m.[D/N] and [F/T] = m.[F/T]),0) 计数2,
           isnull((select count(1) from t where [D/N] = m.[D/N] and [Y/N] = m.[Y/N]),0) 计数3
    from t m
    group by m.name,m.[D/N]