SQL查询可将多条记录的结果获取到一行

时间:2019-02-22 06:14:36

标签: sql tsql pivot

我希望多条记录像这样的细节排成一行...

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

4 个答案:

答案 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;

enter image description here

Demo

上面的演示是针对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;