我不能完全確定你想看到的一個結果是什麼。當問這樣的問題時,不僅要顯示樣本數據,還要顯示樣本輸出,這總是很好的。我將樣本數據翻了一番,以便AVG有工作要做(所以我們知道它正在工作!)。
因爲我真的不知道樞軸應該如何準確是,我舉兩個版本:
declare @versiontests table
(
versiontested char(3),
datetested datetime,
functionname varchar(15),
timetaken float
)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 10:36','function1',10.02)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 10:36','function2',12.36)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 10:36','function3',11.36)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 10:36','function4',14.36)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 10:00','function1',10.06)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 10:00','function2',12.36)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 10:00','function3',12.00)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 10:00','function4',11.02)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 10:00','function1',10.02)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 10:00','function2',12.36)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 10:00','function3',11.02)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 10:00','function4',12.56)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 11:36','function1',10.22)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 11:36','function2',12.31)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 11:36','function3',11.26)
INSERT INTO @versiontests VALUES('v.1','2017-08-02 11:36','function4',14.16)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 11:00','function1',10.56)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 11:00','function2',12.56)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 11:00','function3',12.40)
INSERT INTO @versiontests VALUES('v.2','2017-08-03 11:00','function4',11.22)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 11:00','function1',10.52)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 11:00','function2',12.46)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 11:00','function3',11.09)
INSERT INTO @versiontests VALUES('v.3','2017-07-31 11:00','function4',12.37)
SELECT functionname, datetested, [v.1], [v.2], [v.3]
FROM
(SELECT CAST(datetested AS date) as datetested, versiontested, functionname, timetaken
FROM @versiontests) AS SourceTable
PIVOT
(
AVG(timetaken) FOR versiontested in ([v.1], [v.2], [v.3])
) AS PivotTable
;
SELECT functionname, [v.1], [v.2], [v.3]
FROM
(SELECT versiontested, functionname, timetaken
FROM @versiontests) AS SourceTable
PIVOT
(
AVG(timetaken) FOR versiontested in ([v.1], [v.2], [v.3])
) AS PivotTable
;
編輯
使用相同的表聲明,如上面插入但不是PIVOT選信號使用如下:
declare @functionNames table
(
functionname varchar(15),
rownum int
)
INSERT INTO @functionNames
SELECT d.functionname, ROW_NUMBER() OVER (ORDER BY d.functionname) from
(SELECT DISTINCT functionname FROM @versiontests) as d
declare @cnt int = (SELECT COUNT(*) FROM @functionNames)
declare @rowPtr int = 0
declare @tempFunc varchar(15)
while @rowPtr < @cnt
begin
SET @rowPtr = @rowPtr + 1
SET @tempFunc = (SELECT functionname FROM @functionNames WHERE rownum = @rowPtr)
SELECT versiontested, datetested, functionname, timetaken FROM @versiontests
WHERE functionname = @tempFunc
end
這會將SELECT分成n個獨立的SELECTS。如果您使用DataSet(例如,來自c#),您將在DataSet中獲得n個不同的DataTables。
我認爲雖然你會希望按日期添加一些分組來獲得平均每天,但我把它留給你弄清楚。
您正在尋找返回的數據集,從而使數據可以在圖表中顯示,是嗎?如果是這樣,我不認爲你需要這個支點。你會爲每個函數有一個單獨的圖表,還是一個圖表上的所有函數? – Aidan
@Aidan,是的,我將爲每個功能分別繪製圖表。這怎麼能實現? – Immortal