2014-12-19 29 views
-7

我有OrderInfo表,其中包含OrderTime(日期+時間),OrderTrackDate(日期),OrderTotal(銷售額)列,如下圖所示。如何以小時格式(HH:HourNumber)進行轉換?

表1 1.(原稿臺)

https://lh4.googleusercontent.com/-B4gIQ0DtFn8/VJSrmb5wHVI/AAAAAAAAAJw/8vo4HypwTyI/w573-h187-no/orderinfoCapture.PNG

這裏是我已經樞轉之前到目前爲止已經試過的代碼。

SELECT CAST(DATEPART(DAY, OrderTime) as varchar)+'/'+ CAST(DATEPART(MONTH, OrderTime) as varchar)+'/'+CAST(DATEPART(year,OrderTime) as varchar) as daymonthyear, 
ROUND(SUM(OrderTotal),2) AS Sales, COUNT(OrderTotal) AS Orders 
,datepart(hour,OrderTime) as HH 
FROM OrderInfo where OrderTime >= '5/24/2013' AND OrderTrackDate <='5/30/2013' 
GROUP BY DATEPART(year, OrderTime),DATEPART(MONTH, OrderTime),DATEPART(day, OrderTime),datepart(hour,OrderTime) 
Order By daymonthyear,HH 

2.表2(按日期分組,一小時內,表1)

enter image description here

如何動態地轉動基於Table2每小時展示銷售金額是多少?

所需的輸出

enter image description here

+0

到底是什麼日你遇到的問題是什麼?你的模式是什麼樣的?你有什麼嘗試? – ChrisStillwell

+4

我們不在這裏爲你做你的工作。您編寫查詢,我們可能會嘗試幫助解決問題。 –

+0

愛這些列名稱。非常具有描述性。 –

回答

1

首先,創建一個臨時表來使用它在3個地方 - 選擇列支點,替換空零和內部支點。

SELECT DISTINCT 
SUM(ORDERTOTAL) OVER(PARTITION BY CAST(ORDERTIME AS DATE),DATEPART(HH,ORDERTIME)) [TOTAL], 
CONVERT(varchar, CAST(ORDERTIME AS datetime), 103) [DATE], 
DATEPART(HH,ORDERTIME) [HOUR], 
'HH:'+CAST(DATEPART(HH,ORDERTIME) AS VARCHAR(3)) [HOURCOL] 
INTO #NEWTABLE 
FROM ORDERTBL 
ORDER BY DATEPART(HH,ORDERTIME) 

現在宣佈2個變量來選擇旋轉柱,以零

DECLARE @cols NVARCHAR (MAX) 
DECLARE @NullToZeroCols NVARCHAR (MAX) 

SELECT @cols = COALESCE (@cols + ',[' + [HOURCOL] + ']', 
       '[' + [HOURCOL] + ']') 
       FROM (SELECT DISTINCT [HOUR],[HOURCOL] FROM #NEWTABLE) PV 
       ORDER BY [HOUR] 

SET @NullToZeroCols = SUBSTRING((SELECT ',ISNULL(['+[HOURCOL]+'],0) AS ['+[HOURCOL]+']' 
FROM(SELECT DISTINCT [HOUR],[HOURCOL] FROM #NEWTABLE GROUP BY [HOUR],[HOURCOL])TAB 
ORDER BY [HOUR] FOR XML PATH('')),2,8000) 

替換空現在轉動的結果

DECLARE @query NVARCHAR(MAX) 
SET @query = 'SELECT [DATE],' + @NullToZeroCols + ' FROM 
      (
       SELECT [HOURCOL],[TOTAL], [DATE] FROM #NEWTABLE 
      ) x 
      PIVOT 
      (
       SUM([TOTAL]) 
       FOR [HOURCOL] IN (' + @cols + ') 
      ) p 
      ;' 

EXEC SP_EXECUTESQL @query 
+0

我不能投票,因爲我是一個新用戶,我已經學到了一些新東西。謝謝@Sarath Avanavu –

+0

不客氣。這是你尋找的結果嗎?如果是和正在工作,您可以通過勾選勾號標記此答案爲正確@Jahangir Alam –

+0

這正是我正在尋找的 –

相關問題