2016-06-12 86 views
-9

我有一個SQL Server數據庫,其中有一個包含7列的表dbo.sales需要SQL查詢才能在特定的時間段內從SQL Server數據庫獲取數據

第一列包含不同的銷售人員姓名,第2列至第6列其他信息,第7列銷售平均值。

問題:我需要的是一個查詢來獲取所有銷售人員的詳細信息(所有七列在Excel),如果他們的銷售均價是給定日期間的60%以上。

例如:在我的數據庫中,我有數據從2016年5月1日到2016年5月31日,如果我在25/05/2016至31/05/2016之間在我的Excel表中輸入期間和我所要求的平均值。 60%(應根據我的需要更改),那麼我需要2016年5月25日至31日之間持續銷售額平均值超過60%的所有銷售人員詳細信息。

如果銷售人員平均值低於60 5月28日,我不想在我的報告中看到他。簡而言之,我需要所有在我的搜索期內平均銷售額達到60%以上的銷售人員。

+3

歡迎StackOverflow上。請注意,這不是免費的代碼寫入服務。然而,我們渴望用**代碼來幫助程序員(和有志之士)。請閱讀[我如何問一個好問題](http://stackoverflow.com/help/how-to-ask)上的幫助主題。您可能還想[參觀](http://stackoverflow.com/tour)並在此過程中獲得徽章。之後,請使用您迄今編寫的SQL代碼更新您的問題,以完成您希望實現的任務。此外,更新標籤以反映您正在使用的DB-Server:MySQL **或** SQL-Server。 – Ralph

+0

這不太可能是關於MySQL的。請[編輯]您的問題以刪除該標籤。 –

回答

0

不知道,如果銷售期的日期是在表內,但如果是,該查詢應爲你工作:

;WITH PeriodSales as (
    SELECT * FROM Sales 
    WHERE SalseDate between @StartDt and @EndDt) 
SELECT * FROM PeriodSales 
WHERE SalesPerson not in (
    SELECT SalesPerson FROM PeriodSales 
    WHERE CASE WHEN IsNumeric(salesavg) = 1 
      THEN CAST(salesavg as Decimal) ELSE 0 END <= 60. 
    ); 
+0

爲什麼你需要一個CTE?似乎只有一個查詢可以做到這一點。 – Kason

+0

你說得對。我只是累了兩次在「StartDt和@EndDt」之間輸入「SalseDate」。甚至在「SalseDate」中犯了一個拼寫錯誤。減少打字 - 減少錯誤。 –

+0

非常感謝Slava。我收到錯誤「將轉換varchar值45轉換爲數據類型int時轉換失敗。」請注意,我無法更改數據庫類型。你能否通過調整查詢來幫助解決這個問題。 – pvhy