笔试的时候碰到了一道题(有点难),具体原题我拿不到了。但大体意思如下,不会有出入。大家帮看下这道sql题目怎么做?
----------------------T_id, T_name, T_code, T_time,  
 1     测试       10     a      
 2     测试1      0      b1     
 3     测试1      0      b      
 4     测试1      0      b1     
 5     测试1      0      b      
 6     测试1      0      b1     
 7     测试1      0      b      
 8     测试3      10     c2     
 9     测试3      20     c3     
10     测试3      30     c1     --------------------------------现有求通过sql语句或存储过程得到获得如下的表!column1  column2  column3  column4测试      10         1         1测试1     0         6          2  测试3     60         3         3
----------------------------------说明:
-------------------
column2 中的“10,0,60 ”分别代表。10=10
0=0+0+0+0+0+0
60=10+20+30-------------------------------
column3 中“1,6,3”的含义。
1代表“测试”出现了1次
6代表 “测试1”出现了6次。
3代表“测试3”出现了3次。
--------------------------------
column4 中的“1,2,4”含义
1代表  “测试” a 出现了一次
2代表  “ 测试1”(b1,b)重复的只算一次。故 是 2
3代表   “测试3” (c1,c2,c3) 故是3.-----------------
      

解决方案 »

  1.   

    SELECT T_CODE,SUM(T_CODE), COUNT(T_NAME), COUNT(DISTINCT T_TIME) 
    FROM TAB
    GROUP BY TCODE
      

  2.   

    SELECT T_name 'column1',SUM(ISNULL(T_code,0)) 'column2'
    ,COUNT(1) 'column3',COUNT(DISTINCT T_time) 'column4'
    FROM TB 
    GROUP BY T_NAME
      

  3.   

    select t_name as column1, sum(t_code) as column2, count(1) as column3, a.column4 from tb group by t_name
    join
    (select t_name, count(1) as column4 from tb group by t_name, t_time) a
     on tb.t_name = a.t_name
      

  4.   

    SELECT 
    T_name 'column1',
    SUM(ISNULL(T_code,0)) 'column2'
    ,COUNT(1) 'column3',
    COUNT(DISTINCT T_time)'column4'
    FROM TB 
    GROUP BY T_NAME
      

  5.   

    IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
    GO
    CREATE TABLE TB(
    T_ID INT
    ,T_NAME VARCHAR(50)
    ,T_CODE INT
    ,T_TIME VARCHAR(10)
    )
    INSERT INTO TB
    SELECT 1    ,'测试',      10    ,'a' UNION ALL    
    SELECT 2    ,'测试1',      0      ,'b1' UNION ALL       
    SELECT 3    ,'测试1',      0      ,'b' UNION ALL         
    SELECT 4    ,'测试1',      0      ,'b1' UNION ALL       
    SELECT 5    ,'测试1',      0      ,'b' UNION ALL         
    SELECT 6    ,'测试1',      0      ,'b1' UNION ALL       
    SELECT 7    ,'测试1',      0      ,'b' UNION ALL         
    SELECT 8    ,'测试3',      10    ,'c2' UNION ALL       
    SELECT 9    ,'测试3',      20    ,'c3' UNION ALL       
    SELECT 10   ,'测试3',      30    ,'c1'  SELECT T_name 'column1',SUM(ISNULL(T_code,0)) 'column2' 
    ,COUNT(1) 'column3',COUNT(DISTINCT T_time) 'column4' 
    FROM TB 
    GROUP BY T_NAME/*
    column1                                            column2     column3     column4
    -------------------------------------------------- ----------- ----------- -----------
    测试                                                 10          1           1
    测试1                                                0           6           2
    测试3                                                60          3           3(3 行受影响)
    */
      

  6.   

    --> Title  : Generating test data [tb]
    --> Author : wufeng4552
    --> Date   : 2009-11-17 08:48:28
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb] (T_id int,T_name nvarchar(6),T_code int,T_time nvarchar(4))
    insert into [tb]
    select 1,N'测试',10,'a' union all
    select 2,N'测试1',0,'b1' union all
    select 3,N'测试1',0,'b' union all
    select 4,N'测试1',0,'b1' union all
    select 5,N'测试1',0,'b' union all
    select 6,N'测试1',0,'b1' union all
    select 7,N'测试1',0,'b' union all
    select 8,N'测试3',10,'c2' union all
    select 9,N'测试3',20,'c3' union all
    select 10,N'测试3',30,'c1'
    select T_name column1,
           sum(T_code)column2,
           count(T_name)column3,
           count(distinct T_time)column4
    from tb group by T_name
    /*
    column1 column2     column3     column4
    ------- ----------- ----------- -----------
    测试      10          1           1
    测试1     0           6           2
    测试3     60          3           3(3 個資料列受到影響)
    */ 
      

  7.   

    --> 测试数据: @tb
    declare @tb table (T_id int,T_name varchar(5),T_code int,T_time varchar(2))
    insert into @tb
    select 1,'测试',10,'a' union all
    select 2,'测试1',0,'b1' union all
    select 3,'测试1',0,'b' union all
    select 4,'测试1',0,'b1' union all
    select 5,'测试1',0,'b' union all
    select 6,'测试1',0,'b1' union all
    select 7,'测试1',0,'b' union all
    select 8,'测试3',10,'c2' union all
    select 9,'测试3',20,'c3' union all
    select 10,'测试3',30,'c1'select 
    column1=T_name,
    column2=sum(t_code),
    column3=count(*),
    column4=count(distinct t_time)
    from @tb
    group by t_namecolumn1 column2     column3     column4
    ------- ----------- ----------- -----------
    测试      10          1           1
    测试1     0           6           2
    测试3     60          3           3(3 行受影响)
      

  8.   

    create Table #t(
    T_id int, 
    T_name varchar(50), 
    T_code int, 
    T_time varchar(50))
    Insert Into #t
    Select 1, '测试', 10, 'a' Union All
    Select 2, '测试1', 0, 'b1' Union All
    Select 3, '测试1', 0, 'b' Union All
    Select 4, '测试1', 0, 'b1' Union All
    Select 5, '测试1', 0, 'b' Union All
    Select 6, '测试1', 0, 'b1' Union All
    Select 7, '测试1', 0, 'b' Union All
    Select 8, '测试3', 10, 'c2' Union All
    Select 9, '测试3', 20, 'c3' Union All
    Select 10, '测试3', 30, 'c1'    Select T_name As column1, 
    Sum(T_code) As column2, 
    Count(T_name) As Column3,
    Count(Distinct T_time) As Column4
    From #t
    Group By T_name
      

  9.   

    列名看错了,不好意思。呵呵。
    SELECT T_NAME,SUM(T_CODE),COUNT(T_NAME),COUNT(DISTINCT T_TIME)
    FROM TAB
    GROUPBY T_NAME