有个订单表,字段大概如下Code(订单号,主键),UserName(用户名称),Createtime(订单创建时间),Website(订单来源网站),saletotalPrice(订单金额),PromotionType(折扣类型).
有个查询需求:要求统计每个用户总的下单次数,在A网站的下单次数,第一次下单时间,前一次下单时间,最后一次下单时间,金额总和,折扣类型是1的下单次数.
搞不定了,尤其是在一列当中显示:在A网站的下单次数,前一次下单时间和折扣类型是1的下单次数..
望牛人们给出答案...

解决方案 »

  1.   

    SELECT 用户名称,SUM(CASE WHEN Website = 'A网站' THEN 1 ELSE 0 END) 在A网站的下单次数,
        MIN(Createtime) AS 第一次下单时间,
        ISNULL((SELECT MAX(CreateTime) FROM 订单表
                 WHERE 用户名称=A.用户名称
                      AND CreateTime<(SELECT MAX(CreateTime) FROM 订单表
                                        WHERE 用户名称=A.用户名称)),MIN(CreateTime)) AS 上一次下单时间,
        MAX(CreateTime) AS 最后一次下单时间,
        SUM(订单金额) AS 金额总和,
        SUM(CASE WHEN 折扣类型=1 THEN 1 ELSE 0 END) AS 折扣类型是1的下单次数
    FROM 订单表 AS A 
    GROUP BY 用户名称
      

  2.   

    假设:下单是按时间来排列的,第一次就是最小的创建日期,最后一次就是最大的创建日期,那么--
    select username,count(*) as sumCnt,min(createtime) as minDate,max(createtime) as maxDate,
           (select max(createtime) from tb where username = t.username and createtime < t.createtime) as homDate,
           sum(case when promotiontype = 1 then 1 else 0 end) as type_1Cnt
    from tb t
    group by username
      

  3.   


    select username,count(*) as sumCnt,min(createtime) as minDate,max(createtime) as maxDate,
           (select max(createtime) from tb where username = t.username and createtime < t.createtime) as homDate,
           sum(case when promotiontype = 1 then 1 else 0 end) as type_1Cnt
    from tb t
    where Website = 'A网站'
    group by username
      

  4.   

    select username,count(*) as 总的下单次数,min(createtime) as 第一次下单时间,max(createtime) as 最后一次下单时间,
           
    (select max(createtime) from tb where username = t.username and createtime < t.createtime
    ) as AS 上一次下单时间,
           
    sum(case when promotiontype = 1 then 1 else 0 end) as 折扣类型是1的下单次数
    from tb t
    where Website = 'A网站'
    group by username