2009-08-31 23 views
0

我有一個SQL Server 2005的輸出是這樣的:改變垂直數據插入到表佈局的.Net

Date | Result | Sum 
-----|--------|----- 
8/26 | 01 | 1549 
8/26 | 02 | 7972 
8/26 | 03 | 4502 
8/27 | 01 | 1897 
8/27 | 02 | 1649 
8/27 | 03 | 7949 
8/28 | 01 | 8542 
8/28 | 02 | 5335 
8/28 | 03 | 4445 

,我想讓它顯示了這樣的(在GridView?):

Result | 8/26 | 8/27 | 8/28 
-------|------|------|------ 
    01 | 1549 | 1897 | 8542 
    02 | 7972 | 1649 | 5335 
    03 | 4502 | 7949 | 4445 

我目前的嘗試是試圖通過來自SqlDataSource的DataView以及新的DataSet來做到這一點。雖然我沒有太多的運氣。 「結果」值可以是動態的,並且日期將是動態的。

任何提示?

+0

你使用的數據庫和版本是? – Gratzy

+0

SQL Server 2005 –

+0

檢查這一個:http://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function –

回答

3

與其嘗試在.NET端進行更改,不如修改存儲過程以執行數據透視,這將允許您獲得所需的確切結構。

這是一個MSDN article on PIVOT

+0

(並且我對SQL不太好) –

+1

聽起來像是獲得更好SQL的好時機。 :) – mrdenny

+0

如果只有SQL會變得更好,那麼我將不必:) –

0

這是我的解決方案。讓它工作的最棘手的部分是意識到我不得不使用WITH x as語法,因爲我從來沒有聽說過它。

WITH x as (
    SELECT Days.Date, Disps.HisResult, SUM(CASE WHEN Historic.HisResult IS NULL THEN 0 ELSE 1 END) AS SumResult 
    FROM (
     SELECT DISTINCT DATEADD(day, DATEDIFF(day, 0, DATEADD(hh, -5, HisCallDate)), 0) as Date FROM Historic 
    ) AS Days 
    LEFT JOIN (SELECT DISTINCT roxcoDispCode as HisResult FROM RoxcoSystem.dbo.DispCodes) AS Disps ON 1=1 
    LEFT JOIN Historic ON Disps.HisResult = Historic.HisResult AND Days.Date = DATEADD(day, DATEDIFF(day, 0, DATEADD(hh, -5, HisCallDate)), 0) 
    GROUP BY Days.Date, Disps.HisResult 
) 
SELECT * FROM x 
PIVOT 
(
    MAX(SumResult) 
    FOR HisResult IN ([00], [01], [02], [03]) 
) 
AS p