2014-02-17 48 views
0

我有一個名爲Order.I我希望我的輸出如下所示。請如果可能給我sql查詢。存儲過程接收兩個日期參數,併爲每一週它顯示這樣的報告.IE如果我通過第一個參數2014年10月2日和第二16/02/2014和類似的,如果日期則變化爲每週都應該產生像this.Thanks每天在sql服務器每週報告

Day   Date   Sales 
Monday  10/02/2014 100 
Tuesday  11/02/2014 120 
Wednesday 12/02/2014 140 
Thursday 13/02/2014 160 
Friday  14/02/2014 180 
Saturday 15/02/2014 10 
Sunday  16/02/2014 78 
+0

我不確定我是否理解他的問題。但是如果你想計算每天的銷售額,你只需要按日期和計數(從表中選擇計數(銷售)到日期[不會工作,這只是爲了澄清我的意思]) –

回答

1

如果你知道每一個日期去至少有一個條目沿着以下幾行將起作用:

SELECT 
    Day = DATEPART(DAYOFWEEK,dateColumnName) 
    , Date = dateColumnName 
    , Sales = COUNT(*) 
FROM 
    salesTable 
GROUP BY 
    dateColumnName 

如果它有可能有銷售額爲零的日期,那麼你應該考慮一個臨時表或添加一個日期表到你的數據庫並加入。

編輯:在this article很好地描述

SELECT 
    Day = DATENAME(DW,dateColumnName) -- Wrong function previously used this will get the name 
    , Date = CONVERT(VARCHAR, dateColumnName,103) -- this returns in format dd/mm/yyyy other codes are available 
    , Sales = COUNT(*) 
FROM 
    salesTable 
GROUP BY 
    DATENAME(DW,dateColumnName) 
    ,CONVERT(VARCHAR, dateColumnName,103) 

其它碼。

將以下代碼添加到具有所需參數(我稱它們爲startDateendDate)的存儲過程意味着您可以每週通過執行提供參數的存儲過程來調用此代碼。 (Here's some Microsoft documentation on how procedures are used

CREATE PROC procedureName (
    @startDate DATETIME 
    ,@endDate DATETIME 
) AS 
SELECT 
    Day = DATENAME(DW,dateColumnName) -- Wrong function previously used this will get the name 
    , Date = CONVERT(VARCHAR, dateColumnName,103) -- this returns in format dd/mm/yyyy other codes are available 
    , Sales = COUNT(*) 
FROM 
    salesTable 
WHERE 
    dateColumnName BETWEEN @startDate AND @endDate 
GROUP BY 
    DATENAME(DW,dateColumnName) 
    ,CONVERT(VARCHAR, dateColumnName,103) 

存在具有2個參數的潛在缺點,你可以實際顯示超過1周。您可以使用單個參數創建它,並使用DATEADD函數添加或刪除7天,以確定從提供的單個日期開始/結束日期。

+0

如果'dateColumnName'類型爲'DATETIME' – Tom

+0

我更新了查詢,更正了'DATEPART'到'DATENAME'的用法,並更新了'Date'列以轉換爲'VARCHAR'。原來的代碼假設'DATE'列而不是'DATETIME',但第二個代碼轉換爲一個字符串並進行相應的分組。 – talegna

+0

感謝您的答覆。但請告訴我。我想傳遞數據類型date.And這兩個日期之間的兩個參數我希望我的每週記錄應該像這樣的問題顯示 –