见图片要求!

解决方案 »

  1.   

    SELECT (1/COUNT(司机)) AS 司机频率 
    FROM gjtserver GROUP BY excelserverrcid, 司机
      

  2.   

    把问题再明确一下,即如何根据 excelserverRCID列中相同的数据来计算出司机出现的频次?
      

  3.   

    額,  你既然知道  司机频率 = 1/ (同一班中, 司机名字出现的次数)
    变成SQL语句, 就是根据司机和班次分组額.我之前语句没有注意浮点数转化, 转化下,应该就可以了select convert(decimal(4,3),(1/convert(decimal(4,3), count(司机)))) as 司机频次  
    from 司机出车表  group by  excelserverrcid, 司机
      

  4.   

    你完全可以在excelserver上面进行计算,为啥要用语句实现呢?
      

  5.   


    非常感谢您 的回答,因我不太懂SQL,才开始学习。您 的SQL语句,可以把司机频次计算出来,但不能写入到司机频次中,请问如何写入到司机频次中?有update 语句吗?我这样写 ,不正确:
    update [gkapp].[dbo].[D01卡车运输班统计表_明细] set 司机频次=(select convert(decimal(4,3),(1/convert(decimal(4,3), count(司机)))) as 司机频次  from [gkapp].[dbo].[D01卡车运输班统计表_明细]  group by  excelserverrcid, 司机)请再指导,感谢。
      

  6.   


    原来没有考虑到此字段,目前已经有很多条记录了,等着用此字段的数据,只好用sql来实现。
      

  7.   

    update  应该这么写update [D01卡车运输班统计表_明细] 
    set 司机频次= B.司机频次
    from [D01卡车运输班统计表_明细] AS A
    inner join
    (select excelserverrcid, 司机, 
    convert(decimal(4,3),(1/convert(decimal(4,3), count(司机)))) as 司机频次  
    from [D01卡车运输班统计表_明细]  group by  excelserverrcid, 司机) AS B
    on A.excelserverrcid = B.excelserverrcid AND A.司机 = B.司机
      

  8.   


    意思就是:
    因为你需要统计每个班次的司机情况, 所以先根据司机,班次分组,可以得到每个班次里面, 相同名字的司机, 有多少个。
    查询结果形成一个表(inner join 后面部分到 AS B 可以看作是一个数据视图(你也可以当是一个表了<但非物理存在的表>)) ,
    因为你是对司机,班次分组, 那查询形成的表,跟原表【D01卡车运输班统计表_明细】的关系, 就需要班次和司机名字均相等了,所以有 on A.excelserverrcid = B.excelserverrcid AND A.司机 = B.司机总的更新, 其实你可以看成是
    将B表的X字段, 更新到A表的Y字段
    A表和B表的关系就是A表和B表的COL1,COL1字段分别相等,
    即 on A.excelserverrcid = B.excelserverrcid AND A.司机 = B.司机至于 convert(decimal(4,3) .......  这部分,  其实就是一个类型转化。
    先将同名字同班次司机次数转成浮点型然后再计算, 然后再计算频次 , 
    不先转化, 系统默认会保留整数, 这会导致小数被截取,而无法显示出正确结果
    然后,最外围的 convert(decimal(4,3) ... 也是用小数表示的意思。
      

  9.   


    意思就是:
    因为你需要统计每个班次的司机情况, 所以先根据司机,班次分组,可以得到每个班次里面, 相同名字的司机, 有多少个。
    查询结果形成一个表(inner join 后面部分到 AS B 可以看作是一个数据视图(你也可以当是一个表了<但非物理存在的表>)) ,
    因为你是对司机,班次分组, 那查询形成的表,跟原表【D01卡车运输班统计表_明细】的关系, 就需要班次和司机名字均相等了,所以有 on A.excelserverrcid = B.excelserverrcid AND A.司机 = B.司机总的更新, 其实你可以看成是
    将B表的X字段, 更新到A表的Y字段
    A表和B表的关系就是A表和B表的COL1,COL1字段分别相等,
    即 on A.excelserverrcid = B.excelserverrcid AND A.司机 = B.司机至于 convert(decimal(4,3) .......  这部分,  其实就是一个类型转化。
    先将同名字同班次司机次数转成浮点型然后再计算, 然后再计算频次 , 
    不先转化, 系统默认会保留整数, 这会导致小数被截取,而无法显示出正确结果
    然后,最外围的 convert(decimal(4,3) ... 也是用小数表示的意思。再次表示感谢,有问题再来向您请教!!