SQL-запрос для получения результата из нескольких записей в одну строку - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу, чтобы результат с несколькими записями в одной строке был похож на эту деталь ...

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 голосов
/ 22 февраля 2019

Вы можете использовать стандартную ось для тестового столбца.Если в одном тесте имеется только 1 результат и идентификатор образца одинаков во всех тестах, это должно работать.

Select sampleid, [Test1], [test2], [test3]
From
(Select sampleid, test, result from tblSartoriusFinal) tests
Pivot
(Max(result) for test in ([Test1], [test2], [test3]) pvt;
0 голосов
/ 22 февраля 2019

Вы можете использовать условное агрегирование

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

ИЛИ вы можете использовать PIVOT, если ваша база данных является сервером sql

select sampleid,pv.*
from tablename
pivot (max(result) for test in ([Test1],[Test2],[Test3]))
0 голосов
/ 22 февраля 2019

Я думаю, что в деталях результат запроса неясен, я хочу еще раз упомянуть вывод запроса ... Sampleid Результат теста 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 голосов
/ 22 февраля 2019

Если вы уверены, что ожидаете только три тестовых столбца в выходных данных, а ваша база данных поддерживает 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

Демонстрация

Вышеприведенная демонстрация предназначена для SQL Server, но она должна работать без изменений, необходимых для Oracle, Postgres, MySQL 8+,и, возможно, несколько других.

...