需要在sql server中存储过程或游标

时间:2015-02-25 22:44:18

标签: sql-server-2012

此查询将在表格中插入销售日期和计数。

SELECT 
    replace(CONVERT(varchar(10), DueDate, 112),'-',''),
    count( distinct sale)
FROM 
    sale s 
JOIN  
    Organisation o ON s.Organisationid = o.OrganisationID
WHERE
    CAST(duedate AS DATE) ='1 Jan 2015' 
    AND '01 Jan 2015' BETWEEN StartDateUTC AND EndDateUTC
GROUP BY 
    replace(CONVERT(varchar(10), DueDate, 112),'-','')

我希望我的查询在每月的每一天(2015年1月)运行,并在表格中插入每天的销售次数。

有没有像...的方式。

创建一个游标或一个LOOP,它继续运行一个参数,该参数的起始值为2015年1月1日和2015年1月31日的结束值,并且在第一次运行时它会使1月1日的计数保持不变,并且参数保持递增每一次运行的一天,最后在31日之后停止。

最终结果应该有一张表格,列出2015年1月每天的销售额。

例如:

    1stJan- 10
    2nd jan -20
    3rd Jan - 15

依此类推,直到1月31日

我正在使用SQL Server 2012

1 个答案:

答案 0 :(得分:-1)

您可以使用while循环执行此操作。使用FromDateToDate并增加FromDate,直至到达EndDate。将结果插入临时表,并在循环从临时表(@ResultTable)结束后选择结果。

尝试这样的事情。

DECLARE @FromDate DATE = '01/01/2015', 
        @EndDate DATE = '01/31/2015'

DECLARE @ResultTable TABLE(DueDate VARCHAR(50), Sales INT)

WHILE (@FromDate <= @endDate)
BEGIN

    INSERT INTO @ResultTable

    SELECT 
    replace(CONVERT(varchar(10), DueDate, 112),'-',''),
    count( distinct sale)
    FROM 
        sale s 
    JOIN  
        Organisation o ON s.Organisationid = o.OrganisationID
    WHERE
        CAST(duedate AS DATE) ='1 Jan 2015' 
        AND '01 Jan 2015' BETWEEN StartDateUTC AND EndDateUTC
    GROUP BY 
        replace(CONVERT(varchar(10), DueDate, 112),'-','')

    --Incrementing to next date
    SELECT @FromDate = DATEADD(DAY, 1, @FromDate)
END

SELECT * FROM @ResultTable