我不能完全确定你想看到的一个结果是什么。当问这样的问题时,不仅要显示样本数据,还要显示样本输出,这总是很好的。我将样本数据翻了一番,以便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