我有表1,分别有字段CITY,STORE,NF,XSE,假如要判断某个城市某个时间段哪些店有连续的销售额,现在问题是如何快速地判断这些店在这个时间段内是否连续?
比如我要查找广州08年全年都有销售额的店

解决方案 »

  1.   

    一个sql不就行了吗,distinct(年份),按月group by,如果是12条记录就可以了
      

  2.   

    那就根据数据数量判断一下。select CITY,STORE from (select CITY,STORE,sum(NF) as summon from tablea where  CITY=xxx group by STORE) where summon>11 
      

  3.   

    我的理解:
    CITY:城市
    STORE:店(现在理解为店的编号,而不是名称)
    NF:年份,字符串格式,形如"0802"表示08年02月
    XSE:销售额要查找广州08年全年都有销售额的店
    Select Store,Count(Distinct Substring(NF,3,2)) as YSXEDYFS --YSXEDYFS:有销售额的月份数
    from Table 
    group by Store  --按店分组
    Having          --分组条件
          City='广州'                --城市为广州
      and SUBSTRING (NF,1,2)='08'   --08年
      and XSE>0                     --销售额大于0
      and Count(Distinct Substring(NF,3,2)) =12    --统计的不同的月份数为12个月
      

  4.   


    这样好像不对吧?summon是在内查询语句内,怎么可以放到外查询语句内呢?
      

  5.   


    不行,没有达到我想要的结果我想要结果出来后,显示各店每个月份的XSE情况
    而且你的这种方法只是特别指定了08年,而我的查询条件有可能是07年4月份至09年10月份的情况
    查询的月份是动态的
      

  6.   

    在wooden的方法上改了下,日期为全格式
    declare @BeginDate dateTime,@EndDate dateTime
    set @BeginDate = '2007-04-01' 
    set @EndDate = '2009-10-01'
    Select Store,convert(varchar(7),NF,120) as YF,Sum(XSE)  as SumXSE
    from Table1
    Where 1 =1 
    and City='广州'                --城市为广州
    and NF between @BeginDate and @EndDate --时间间隔
    and XSE>0                     --销售额大于0
    group by Store,convert(varchar(7),NF,120) --按店、年、月分组
    Having   Count(Distinct convert(varchar(7),NF,120))) = datediff(month,@BeginDate,@EndDate) +1    --统计的不同的月份数为两个日期的月份差
      

  7.   

    不管怎么查。。 都是慢的
    不如设计一个表存储了结果
    CITE, NF, LX1, LX2, ...LX12 分别表示连续的情况
    然后查询的时候直接查询这个表就可以了至于刷新,弄一个触发器,处理处理就可以了
      

  8.   

    对于时间参数,可用Select Store,Count(Distinct Substring(NF,3,2)) as YSXEDYFS --YSXEDYFS:有销售额的月份数
    from Table 
    group by Store  --按店分组
    Having          --分组条件
          City='广州'                --城市为广州
      and NF>='0704' and NF<='0910'   --07年4月份至09年10月份
      and XSE>0                     --销售额大于0
      and Count(Distinct NF)=datediff(month,'0704'+'01','0910'+'01')--统计指定两个时间之间的月份数,其中'0704'和'0910'是指定的时间,指定时间的字符串后面+'01'是为了形成“年月日”的格式给DateDiff函数调用上面代码能够判断指定的两个日期间的销售额是否连续,但是你所说的“显示各店每个月份的XSE情况”与你帖子的问题不同,当时没有考虑,
    既然这个查询能够查询出连续的店编号,那么你把店编号作为条件再查询一次就能得到各店的每个月份的销售额情况了