比如销售发货单,从2006年10月份开始发生业务,至2007年11月份,由于公司的销量统计是以每个月的25日为标准段,比如要查A商品 2007年11月份的销量,其实是2007年6月25日至7月25日此商品的发货量。
如何在一张表中显示所有期间的销量表。期间         商品名称     本期销量
---------   -----------   --------2007年1月份   A 商品      10000
2007年2月份   A 商品      10000

解决方案 »

  1.   

    直接写就完了啊.
    select * from xxx where rq between '2007-06-25' and '2007-07-25'
      

  2.   

    SELECT Col1,Col2.....FROM Table_Name 
    Where Date_Time Between @Start_Date And DateADD(m,1,@Start_Date)
      

  3.   

    另外,每月25日算本月还是下月,要说清楚,而且你的销售日期是什么类型的
    我下面的代码是假设你的销售日期是时间类型的,25日划入下月的情况
    SELECT Sales.销售期间,Sales.商品名称,SUM(Sales.销量)AS 本期销量 
    FROM 
    (SELECT (CASE WHEN Day(销售日期)<25 THEN CONVERT(VARCHAR(4),Year(销售日期))+'年'
    CONVERT(VARCHAR(2),Month(销售日期))+'月份' ELSE 
    CONVERT(VARCHAR(4),Year(DATEADD(m,1,销售日期)))+'年'
    CONVERT(VARCHAR(2),Month(DATEADD(m,1,销售日期)))+'月份'END)AS 销售期间,
    商品名称,销量 
    FROM 销售发货单)Sales 
    GROUP BY Sales.销售期间,Sales.商品名称
    ORDER BY Sales.销售期间,Sales.商品名称
      

  4.   

    在表设计的时候,在单据上,最好设置几个列,如year,month,date3个列用来区分日期和月份,然后在插入数据时根据日期自动填入year和month,如果单据表没有这样设计,那就自己写语句吧
      

  5.   

    declare @t table(期间 char(12),名称 varchar(50),销量 money)insert @t SELECT 'rq' = 
          CASE 
             WHEN rq bwtween '2007/1/25' and '2007/2/25' THEN '2007年2月'
             WHEN rq between '2007/2/25' and '2007/3/25' THEN '2007年2月'
    ......
          END,
       mc,xl FROM 销售明细select 期间,名称,sum(销量) from @t group by 期间,名称写法比较麻烦,因为“期间”是自定义的。
      

  6.   

    就想从下面的表中,制作出销售期间数量表:
    YEAR MONTH DAY CODE NAME NUM
    2004 1 2 A00001 Intel 赛扬 2.4GHz 1
    2004 1 4 A00001 Intel 赛扬 2.4GHz 1
    2004 1 4 A00002 Intel P4 XEON 1.8GHz 2
    2004 1 23 F00003 A0208C 1
    2004 1 23 B00001 Kingmax 512MB DDR 333 1
    2004 1 23 A00007 AMD Athlon XP 1800+ 2
    2004 1 23 A00004 Intel P4 2.8GHz 5
    2004 1 23 A00008 AMD Athlon XP 2700+ 15
    2004 2 2 A00001 Intel 赛扬 2.4GHz 10
    2004 2 18 A00006 AMD Athlon XP 2000+ 50
    2004 2 18 A00005 Intel P4 2.6CGHz 30
    2004 2 16 A00001 Intel 赛扬 2.4GHz 1
    2004 2 16 A00002 Intel P4 XEON 1.8GHz 1
    2004 2 27 A00001 Intel 赛扬 2.4GHz 1
    2004 2 27 A00002 Intel P4 XEON 1.8GHz 1
    2004 2 27 A00006 AMD Athlon XP 2000+ 1
    2004 3 3 A00001 Intel 赛扬 2.4GHz 10
    2004 3 3 B00001 Kingmax 512MB DDR 333 10
    2004 3 3 B00002 Kingmax 256MB DDR 266 10
    2004 4 29 A00006 AMD Athlon XP 2000+ 1
    2004 4 29 A00007 AMD Athlon XP 1800+ 1
    2004 4 29 A00008 AMD Athlon XP 2700+ 1
    2004 4 29 A00009 AMD Athlon XP 2200+ 1
    2004 4 29 D00001 UX 20G 5400转 2M 10
    2004 5 8 A00001 Intel 赛扬 2.4GHz 1
    2004 5 8 A00002 Intel P4 XEON 1.8GHz 1
    2004 5 8 A00003 Intel P4 XEON 2.4GHz 1
    2004 5 9 B00001 Kingmax 512MB DDR 333 10
    2004 5 9 B00002 Kingmax 256MB DDR 266 5
    2004 5 9 B00003 512MB DDR 266 4
    2004 5 9 D00002 UX 40G 5400转 2M 10
    2004 5 9 D00003 JB 80G 7200转 8M 15
    2004 5 10 A00005 Intel P4 2.6CGHz 15
    2004 5 26 D00002 UX 40G 5400转 2M 15
    2004 5 26 F00002 N07(带电源) 5
    2004 5 26 F00001 Q06(带电源) 5
    2006 4 19 A00005 Intel P4 2.6CGHz 3
      

  7.   

    SELECT Sales.销售期间,Sales.商品名称,SUM(Sales.销量)AS 本期销量 
    FROM 
    (SELECT (CASE WHEN DAY<25 THEN CONVERT(VARCHAR(4),YEAR)+'年'+CONVERT(VARCHAR(2),MONTH)+'月份' ELSE 
    (CASE WHEN MONTH=1 THEN CONVERT(VARCHAR(4),YEAR-1)+'年12'+'月份' ELSE
    CONVERT(VARCHAR(4),YEAR)+'年'+CONVERT(VARCHAR(2),MONTH-1)+'月份'END)END)AS 销售期间,
    NAME AS 商品名称,NUM AS 销量 
    FROM 销售发货单)Sales 
    GROUP BY Sales.销售期间,Sales.商品名称
    ORDER BY Sales.销售期间,Sales.商品名称
      

  8.   

    OK,可以了,不过下面这句,是为了创建一个新表吗?
    (SELECT (CASE WHEN DAY<25 THEN CONVERT(VARCHAR(4),YEAR)+'年'+CONVERT(VARCHAR(2),MONTH)+'月份' ELSE 
    (CASE WHEN MONTH=1 THEN CONVERT(VARCHAR(4),YEAR-1)+'年12'+'月份' ELSE
    CONVERT(VARCHAR(4),YEAR)+'年'+CONVERT(VARCHAR(2),MONTH-1)+'月份'END)END)AS 销售期间,
    NAME AS 商品名称,NUM AS 销量 
    FROM 销售发货单)
      

  9.   

    实际上这个子查询只是一个逻辑,就是展示了你们所定义的“期间”,
    如果觉得这个比较难用的话,建议你另建一张日期归属表,假设你的销售表的字段如上所述。
    可以建立下面的一张表
    create table Time_Belong
    (
    year smallint,
    month smallint,
    day smallint,
    year_belong varchar(20),-- 标识此时间所属的业务年度,若有财务年度,且与业务年度不相同,则可另增加一列。
    time_belong varchar(20) -- 标识此时间所属的年月,也就是你上面所说的区间
    )
    这个表你可以一次建立几年的数据,一年就是365/366行,一次性建立,以后用的时候直接和销售事实表进行管理即可。
    以上纯属个人意见,仅供参考