У меня вопрос:

SELECT
    PatientId, Parameter, AVG(CONVERT(INT, CONVERT(NVARCHAR(100), [Value]))) as [Value]
FROM 
    ExaminationDetails
JOIN 
    Examinations 
ON
    Examinations.Id = ExaminationDetails.ExaminationId
WHERE 
    Parameter IN ('BLD_SYS', 'BLD_DIA')
GROUP BY 
    PatientId, Parameter

Которые возвращают результат:

PatientId | Parametr | Value
----------+----------+-------
3         | BLD_DIA  | 96
----------+----------+-------
98        | BLD_DIA  | 89
----------+----------+-------
3         | BLD_SYS  | 137
----------+----------+-------
98        | BLD_SYS  | 133
----------+----------+------

Есть ли способ изменить возвращаемое значение таблицы, когда BLD_DIA и BLD_SYS возвращаются как столбцы:

 PatientId | BLD_DIA | BLD_SYS
 ----------+---------+--------
    3      |  96     |  137
 ----------+---------+--------
    98     |  89     |  133
 ----------+---------+--------
0
Michael Kostiuchenko 11 Фев 2021 в 10:30

1 ответ

Я улучшаю ваш запрос с помощью CTE и условного агрегирования

with cte as (
    SELECT
        PatientId, Parameter
        , AVG(CONVERT(INT, CONVERT(NVARCHAR(100), [Value]))) as [Value]
    FROM 
        ExaminationDetails
    JOIN 
        Examinations 
    ON
        Examinations.Id = ExaminationDetails.ExaminationId
    WHERE 
        Parameter IN ('BLD_SYS', 'BLD_DIA')
    GROUP BY 
        PatientId, Parameter
)
select PatientId
    , max(case when Parameter='BLD_DIA' then [Value] end) BLD_DIA
    , max(case when Parameter='BLD_SYS' then [Value] end) BLD_DIA
from cte
group by PatientId
1
Michael Kostiuchenko 11 Фев 2021 в 08:02
66150466