k1      k2     k3      k4      k5
1 1 0 0 0
1 1 1 1 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
3 3 3 3 3
2 2 2 2 3
3 2 2 2 3
3 2 2 2 2想统计出这此记里中有多少个1多少个2多少个3望高手赐教

解决方案 »

  1.   

    统计1的个数的试试这个:
    Select Sum((Case K1 When 1 Then 1 Else 0 End) + (Case K2 When 1 Then 1 Else 0 End) + (Case K3 When 1 Then 1 Else 0 End) + (Case K4 When 1 Then 1 Else 0 End) + (Case K5 When 1 Then 1 Else 0 End)) From ...
    时间来不及试了,你自己调试吧,其它差不多。
      

  2.   

    楼上这种方法,现在用着,可是导致SQL太长,看着不爽。很郁闷,可读性生差。想找简单的。
      

  3.   

    case when 用decode来实现,要短一点
      

  4.   

    select K,sum(cnt)
    from (
    select K1 as K,count(*) as cnt from table group by K1
    union all select K2,count(*) from table group by K2
    union all select K3,count(*) from table group by K3
    union all select K4,count(*) from table group by K4
    union all select K5,count(*) from table group by K5
    )T
    group by K
    这么写一次就全统计出来了,包括0...
      

  5.   


    declare @table table (k1 int,k2 int,k3 int,k4 int,k5 int)
    insert into @table
    select 1,1,0,0,0 union all
    select 1,1,1,1,1 union all
    select 0,0,0,0,0 union all
    select 0,0,0,0,0 union all
    select 0,0,0,0,0 union all
    select 3,3,3,3,3 union all
    select 2,2,2,2,3 union all
    select 3,2,2,2,3 union all
    select 3,2,2,2,2select k1,count(*) as 个数 from 
    (select k1 from @table union all 
    select k2 from @table union all
    select k3 from @table union all
    select k4 from @table union all
    select k5 from @table
    ) aa group by k1 having(k1<>0)/*
    k1          个数
    ----------- -----------
    1           7
    2           11
    3           9
    */
      

  6.   

    想语句简单的话,就先全查找出来,放到list中            List<int> list = new List<int>();//自己填充数据
                list.Where(p => p == 1).Count();//1的个数
                list.Where(p => p == 2).Count();2的个数
                list.Where(p => p == 3).Count();3的个数
      

  7.   

    ---测试数据库SQL Server
    SELECT SUM(NUM1) T1, SUM(NUM2) T2, SUM(NUM3) T3
      FROM (SELECT LEN(STRS) - LEN(REPLACE(STRS, '1', '')) AS NUM1,
                   LEN(STRS) - LEN(REPLACE(STRS, '2', '')) AS NUM2,
                   LEN(STRS) - LEN(REPLACE(STRS, '3', '')) AS NUM3
              FROM (SELECT REPLACE(STR(K1) + STR(K2) + STR(K3) + STR(K4) +
                                   STR(K5),
                                   ' ',
                                   '') AS STRS
                      FROM TESTSUM) TB1) TB