-1

嗨,我想在同一份报告中制作一份包含年初至今和两年前信息的销售报告。我有这个查询作为选择 2007 年的示例,但我需要逐年执行,然后是 2012、2011、2010。在同一份报告中。任何想法?谢谢

我从表中选择字段名称,其中 DocDate > = '2007-01-01' 和 DocDate <='2007-12-31'

4

3 回答 3

0
CREATE PROCEDURE GetSalesReport 
    @Year AS INT
AS
BEGIN
    DECLARE @DateFrom AS DATETIME
    DECLARE @DateTo AS DATETIME

    SET @DateFrom = CONVERT(DATETIME,CONVERT(VARCHAR(4),@Year)+'0101')
    SET @DateTo = GETDATE()

    select field names 
    from tables
    where DocDate > = @DateFrom and DocDate <=@DateTo

    SET @DateFrom = CONVERT(DATETIME,CONVERT(VARCHAR(4),@Year-1)+'0101')
    SET @DateTo = CONVERT(DATETIME,CONVERT(VARCHAR(4),@Year-1)+'1231')

    select field names 
    from tables
    where DocDate > = @DateFrom and DocDate <=@DateTo


    SET @DateFrom = CONVERT(DATETIME,CONVERT(VARCHAR(4),@Year-2)+'0101')
    SET @DateTo = CONVERT(DATETIME,CONVERT(VARCHAR(4),@Year-2)+'1231')

    select field names 
    from tables
    where DocDate > = @DateFrom and DocDate <=@DateTo
END
于 2013-10-10T18:33:36.240 回答
0

要做年初至今,只需输入“WHERE DocDate >= 2013-01-01”

每年制作一个 WHERE 条件 'WHERE DocDate >= 2012-01-01 and DocDate <= 2012-12-12'

于 2013-10-10T18:31:02.370 回答
0

如果您想要当前年初至今的所有数据以及过去 2-3 年的所有数据(标题显示 2,帖子显示 3)

select
      YEAR(DocDate) as EachYear,
      field names
   from 
      tables
   where 
      DocDate > = '2007-01-01'
   order by
      EachYear DESC

现在,如果您尝试进行一些聚合,例如年度销售计数、总计等,您将为“EachYear”计算列应用 GROUP BY

select
      YEAR(DocDate) as EachYear,
      sum( someTable.orderAmt ) as TotalOrdered,
      count(*) as NumberOrders,
      avg( someTable.OrderAmt ) as AvgOrder
   from 
      tables
   where 
      DocDate > = '2007-01-01'
   GROUP BY
      Year(DocDate)
   order by
      Year(DocDate) DESC
于 2013-10-10T18:44:16.973 回答