我希望多条记录像这样的细节排成一行...
SELECT Sampleid, Test, [Result] FROM [tblSartoriusFinal]
where sampleid='77-5080-08'
''''''''''''''''''''''''''''''''' 输出
Sampleid Test Result
77-5080-08 Test1 0.0910
77-5080-08 Test2 33.9700
77-5080-08 Test3 16908.0000
........ 我的要求是针对其测试的一行输出和结果字段名称,如
SampleID, Test1, Test2, Test3
77-5080-08 0.0910 33.9700 16908.0000
答案 0 :(得分:0)
如果您确定只希望输出中包含三个测试列,并且您的数据库支持ROW_NUMBER
,那么我们可以尝试:
WITH cte AS (
SELECT SampleID, Test, Result,
ROW_NUMBER() OVER (PARTITION BY SampleID ORDER BY Test) rn
FROM [tblSartoriusFinal]
)
SELECT
SampleID,
MAX(CASE WHEN rn = 1 THEN Result END) AS Test1,
MAX(CASE WHEN rn = 2 THEN Result END) AS Test2,
MAX(CASE WHEN rn = 3 THEN Result END) AS Test3
FROM cte
GROUP BY
SampleID;
上面的演示是针对SQL Server的,但是它可以在Oracle,Postgres,MySQL 8+以及其他一些版本上运行而无需更改。
答案 1 :(得分:0)
您可以使用条件聚合
select Sampleid,max(case when Test='Test1' then Result end) as test1,
,max(case when Test='Test2' then Result end) as test2,
,max(case when Test='Test3' then Result end) as test3
from tablename
group by Sampleid
或者如果您的dbms是sql server,则可以使用PIVOT
select sampleid,pv.*
from tablename
pivot (max(result) for test in ([Test1],[Test2],[Test3]))
答案 2 :(得分:0)
我认为上面的查询结果不清楚,我想再提一遍 查询输出... 样品测试结果 77-5080-08测试1 0.0910 77-5080-08 Test2 33.9700 77-5080-08 Test3 16908.0000
我想要这样的输出
样本,Test1,Test2,Test3
77-5080-08 0.0910 33.9700 16908.0000
答案 3 :(得分:0)
您可以将标准枢轴用于测试列。如果每个测试只有1个结果,并且所有测试中的样品ID均相同,那么这应该可行。
Select sampleid, [Test1], [test2], [test3]
From
(Select sampleid, test, result from tblSartoriusFinal) tests
Pivot
(Max(result) for test in ([Test1], [test2], [test3]) pvt;