SELECT ProjectID,convert(varchar(10),[Time],120) as 日期,count(ID) as 预约量,
到诊数量=sum(case when PatientStatus='复诊' or PatientStatus='初诊' then 1 else 0 end)
  FROM Orders group by convert(varchar(10),[Time],120),ProjectID
这条sql语句呈现的的样子如下:   日期        点击量    对话量     有效对话量    预约量         实际到诊量
 2012-1-1      1000       200         50            40               10 
 2012-1-2      2000       700         40            30               8
 2012-1-3      3000       500         20            10               7
现在我要在统计中再添加一列 名字叫做“该日历史预约总和”。
“该日历史预约总和”的含义就是Orders表中OrderTime列的值为上面呈现样子中相对应的日期的值。
举个例子,我实际最终想呈现出的样子如下->   日期        点击量    对话量     有效对话量    预约量     该日历史预约总和    实际到诊量
 2012-1-1      1000       200         50            40          100           10 
 2012-1-2      2000       700         40            30          200           8
 2012-1-3      3000       500         20            10          300           7
再用一个sql语句解释一下您可能更清楚我的意思,大概的sql语句如下(注意第三行,我肯定是写错了,应该怎么写呢?)->SELECT ProjectID,convert(varchar(10),[Time],120) as 日期,count(ID) as 预约量,
到诊数量=sum(case when PatientStatus='复诊' or PatientStatus='初诊' then 1 else 0 end)
该日历史预约总和 = sum(case when convert(varchar(10),[OrderTime],120)=convert(varchar(10),[Time],120) then 1 else 0 end)
  FROM Orders group by convert(varchar(10),[Time],120),ProjectID
不知道一条sql语句能否实现我要的功能!!感谢回答!! 

解决方案 »

  1.   

    刚刚测试了下我最后写的那条sql语句 居然没报错 我再看看我写的对不对
      

  2.   

    经测试 convert(varchar(10),[OrderTime],120)=convert(varchar(10),[Time],120)
    这条语句存在一个逻辑错误,具体我也表达不清楚 先吃饭 然后再整理一下思路
      

  3.   

    注:[Time]列为order表录入时的系统时间
      

  4.   

    不知道我的需求有没有说清楚 
    我写的那个SQL应该是有局限 希望看明白需求的高手帮忙写条sql出来
      

  5.   

    没太明白您的意思 
    表中的Time列和OrderTime列都是datetime类型精确到秒的 所以用convert(varchar(10),[OrderTime],120)。。转换的 因为我只取出日期进行统计
      

  6.   

    --不知道是不是这个意思
    select a.*,b.该日历史预约总和 from 
    (
    select 
    projectid,
    convert(varchar(10),[time],120) as 日期,
    count(id) as 预约量,
    到诊数量=sum(case when patientstatus='复诊' or patientstatus='初诊' then 1 else 0 end)
    from orders 
    group by convert(varchar(10),[time],120),projectid
    ) a
    left join
    (
    select 
    right(convert(varchar(10),[time],120),5) as 日期, 
    count(1) as 该日历史预约总和
    from orders 
    right(convert(varchar(10),[time],120),5)

    b on right(a.日期,5)=b.日期
      

  7.   

    用我的那条sql语句查询的结果如下->          日期          预约量    到诊量   该日期历史预约总和
    2012-01-17 2 0 0
    2012-01-18 4 1 3
    但这是错误的结果 因为在order表中 OrderTime为2012-01-18的意共有4行数据 而上面只显示了3
      

  8.   

    貌似明白了,该日历史预约不区分projectid?
    select a.*,b.该日历史预约总和 from 
    (
        select 
            projectid,
            convert(varchar(10),[time],120) as 日期,
            count(id) as 预约量,
            到诊数量=sum(case when patientstatus='复诊' or patientstatus='初诊' then 1 else 0 end)
        from orders 
        group by convert(varchar(10),[time],120),projectid
    ) a
    left join
    (
        select 
            convert(varchar(10),[time],120) as 日期, 
            count(1) as 该日历史预约总和
        from orders 
        convert(varchar(10),[time],120)

    b on a.日期=b.日期
      

  9.   

    再请教个问题,select a.*   a后面的点和星是什么意思?