我有一个表liansai,字段有:name,result
数据有:                    张三,胜
                            李四,胜
                            张三,负
                            张三,胜
                            张三,胜
                            李四,胜
                            李四,胜
这是一个比赛结果的记录表。现在我想把结果输出如下几项:
         name,比赛场次,胜场,负场,胜率,总积分(胜一场3分,负一场1分)
         张三, 4,     3,    1,  75% ,10
         李四, 3,     3,    0,  100%, 9我不知道如何把统计胜场和负场的数量与总场次的数量放在一个语句中实现;
统计总场次的语句:select name,count(result) as 比赛场次 from liansai group by name
 
我想写的是:select name ,count(result) as 比赛场次,count(result='负') as 负场,
count(result='胜') as 胜场,........... (另,胜率和总积分如何统计?) from liansai group by name        
    菜鸟问题,望指点迷津
 

解决方案 »

  1.   

    Select 
    name,
    Count(result) As 比赛场次,
    SUM(Case result When N'胜' Then 1 Else 0 End) As 胜场,
    SUM(Case result When N'负' Then 1 Else 0 End) As 负场,
    Rtrim(Cast(SUM(Case result When N'胜' Then 1 Else 0 End)*100.0/SUM(Case result When N'负' Then 1 Else 0 End)  As Int))+'%' As 胜率,
    SUM(Case result When N'胜' Then 3 Else 1 End) As 总积分
    From liansai
    Group By name
      

  2.   


    select name,count(1) as 比赛场次,
    sum(case result when '胜' then 1 else 0 end) as 胜场,
    sum(case result when '负' then 1 else 0 end) as 负场,
    cast(sum(case result when '胜' then 1 else 0 end)*100.00/count(1) as varchar)+'%' as 胜率,
    sum(case result when '胜' then 3 when '负' then 1 else 0 end) as 总积分
    from liansai 
    group by name
      

  3.   

    Select 
    name,
    Count(result) As 比赛场次,
    SUM(Case result When N'胜' Then 1 Else 0 End) As 胜场,
    SUM(Case result When N'负' Then 1 Else 0 End) As 负场,
    Rtrim(Cast(COUNT(Case result When N'胜' Then 1 Else 0 End)*100.0/COUNT(RESULT))+'%' As 胜率,
    SUM(Case result When N'胜' Then 3 Else 1 End) As 总积分
    From liansai
    Group By name
      

  4.   

    錯了點Create Table liansai
    (name Nvarchar(10),
     result NChar(2))
    Insert liansai Select N'张三',N'胜'
    Union All Select N'李四',N'胜'
    Union All Select N'张三',N'负'
    Union All Select N'张三',N'胜'
    Union All Select N'张三',N'胜'
    Union All Select N'李四',N'胜'
    Union All Select N'李四',N'胜'
    GO
    Select 
    name,
    Count(result) As 比赛场次,
    SUM(Case result When N'胜' Then 1 Else 0 End) As 胜场,
    SUM(Case result When N'负' Then 1 Else 0 End) As 负场,
    Rtrim(Cast(SUM(Case result When N'胜' Then 1 Else 0 End)*100.0/Count(result)  As Int))+'%' As 胜率,
    SUM(Case result When N'胜' Then 3 Else 1 End) As 总积分
    From liansai
    Group By name
    GO
    Drop Table liansai
    --Result
    /*
    name 比赛场次 胜场 负场 胜率 总积分
    李四 3 3 0 100% 9
    张三 4 3 1 75% 10
    */
      

  5.   

    SELECT name,count(*) as changci,sum(iif (result='负',1, iif(result='胜',0))) as 负场,sum(iif (result='负',0, iif(result='胜',1))) as 胜场,sum(iif (result='负',1, iif(result='胜',3))) as 总积分,RTrim(Cast(sum(iif (result='负',0, iif(result='胜',1)))*100.0/Count(result) As Int))+'%' As 胜率
    FROM liansai group by name
    通过查询,在access中是不能用case when 语句的,只能用iif 语句。衷心感谢上述几位给我的认真解答。