SQL-запрос для перемещения строк в столбцы таблицы плюс псевдонимы - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь получить данные из одной базы данных и поместить их в формат второй базы данных, где схемы отличаются.Я пытаюсь получить данные, которые находятся в нескольких строках одной таблицы, в одну строку с некоторой логикой для изменения имен полей.У меня будет уникальный идентификатор (meetID), который будет ключом в таблице результатов и внешним ключом в нескольких строках.

Вот моя желаемая схема вывода, временная таблица:

CREATE TABLE #tmpSurgery
(       
EncounterID INT NULL,
RvAmplitude DECIMAL(7,2) NULL,
RvImpedance DECIMAL(7,2) NULL,
RvPulseWidth DECIMAL(7,2) NULL,
RvVoltage DECIMAL(7,2) NULL,
RvCurrent DECIMAL(7,2) NULL,
LvAmplitude DECIMAL(7,2) NULL,
LvImpedance DECIMAL(7,2) NULL,
LvPulseWidth DECIMAL(7,2) NULL,
LvVoltage DECIMAL(7,2) NULL,
LvCurrent DECIMAL(7,2) NULL,
RvLvAmplitude DECIMAL(7,2) NULL,
RvLvImpedance DECIMAL(7,2) NULL,
RvLvPulseWidth DECIMAL(7,2) NULL,
RvLvVoltage DECIMAL(7,2) NULL,
RvLvCurrent DECIMAL(7,2) NULL,
AtrialAmplitude DECIMAL(7,2) NULL,
AtrialImpedance DECIMAL(7,2) NULL,
AtrialPulseWidth DECIMAL(7,2) NULL,
AtrialVoltage DECIMAL(7,2) NULL,
AtrialCurrent DECIMAL(7,2) NULL
) 

Обратите внимание, что в разных столбцах есть поля с префиксами Rv-, Lv-, RvLv- и Atrial- для амплитуды, ширины импульса, импеданса, напряжения и тока.Моя исходная таблица #tmpLeads имеет следующие столбцы:

LeadID
EncounterID
LeadValue
Amplitude
PulseWidth
Impedance
Voltage
Current

Где находится LeadValue ('Rv', 'Lv', 'RvLv', 'Atrial'), и EncounterID совпадает, а LeadID являетсяуникальный ключ для каждой строки в поле, и он не обязательно должен быть в таблице результатов.

В моем случае обычно будет только две строки в #tmpLeads для каждого EncounterID, но LeadValues ​​может бытьлюбые два из приведенных выше различных значений LeadValues ​​(никогда не два «Lv», два «Rv» или «RvLv» и т. д., но «Lv» и «Atrial» или «Atrial» и «RvLv».)

Итак, наконец, мои вопросы:

Как выбрать значения из #tmpLeads для обновления #tmpSurgery, чтобы я обновлял соответствующие значения на основе LeadValue, чтобы у меня была одна строка?

1 Ответ

2 голосов
/ 01 декабря 2011

Это должно работать:

INSERT INTO #tmpSurgery 
(
    EncounterID,
    RvAmplitude,
    RvImpedance,
    RvPulseWidth,
    RvVoltage,
    RvCurrent,
    LvAmplitude,
    LvImpedance,
    LvPulseWidth,
    LvVoltage,
    LvCurrent,
    RvLvAmplitude,
    RvLvImpedance,
    RvLvPulseWidth,
    RvLvVoltage,
    RvLvCurrent,
    AtrialAmplitude,
    AtrialImpedance,
    AtrialPulseWidth,
    AtrialVoltage,
    AtrialCurrent
)

SELECT 
    tblDistinct.EncounterID,
    tblRv.Amplitude,
    tblRv.Impedance,
    tblRv.PulseWidth,
    tblRv.Voltage,
    tblRv.[Current],
    tblLv.Amplitude,
    tblLv.Impedance,
    tblLv.PulseWidth,
    tblLv.Voltage,
    tblLv.[Current],
    tblRvLv.Amplitude,
    tblRvLv.Impedance,
    tblRvLv.PulseWidth,
    tblRvLv.Voltage,
    tblRvLv.[Current],
    tblAtrial.Amplitude,
    tblAtrial.Impedance,
    tblAtrial.PulseWidth,
    tblAtrial.Voltage,
    tblAtrial.[Current]
FROM (SELECT DISTINCT EncounterID FROM #tmpLeads) as tblDistinct
LEFT OUTER JOIN #tmpLeads as tblRv 
    ON tblRv.EncounterID = tblDistinct.EncounterID
    AND tblRv.LeadValue = 'Rv'
LEFT OUTER JOIN #tmpLeads as tblLv 
    ON tblLv.EncounterID = tblDistinct.EncounterID
    AND tblLv.LeadValue = 'Lv'
LEFT OUTER JOIN #tmpLeads as tblRvLv 
    ON tblRvLv.EncounterID = tblDistinct.EncounterID
    AND tblRvLv.LeadValue = 'RvLv'
LEFT OUTER JOIN #tmpLeads as tblAtrial 
    ON tblAtrial.EncounterID = tblDistinct.EncounterID
    AND tblAtrial.LeadValue = 'Atrial'

Проверьте это в действии здесь, на SEDE .

...