2011-12-01 20 views
1

我试图从一个数据库中获取数据,并将其置于第二个数据库的格式中,其中模式不同。我试图将一个表的多行中的数据变成单行,并用一些逻辑来改变字段名称。我将有一个唯一的ID(encounterID),它将成为结果表中的一个键,并且是多行中的外键。用于将行移动到表中的列的SQL查询以及别名

这是我想要的输出模式,一个临时表:

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是(“旅行车”,“吕”,“RvLv”,“房”)和EncounterID是相同的,并且LeadID是唯一的关键对于字段中的每一行,并且不需要在结果表中。

在我的情况下,每个EncounterID通常只有两行#tmpLeads,但是LeadValues可以是上面任何两个不同的LeadValues(从来没有两个'Lv's,两个'Rv'或'RvLv's等等,但一个“吕”和“房”,或“房”和“RvLv”)

所以,最后,我的问题:

如何选择值超出#tmpLeads的更新#tmpSurgery,以便根据LeadValue更新适当的值,所以我有一行?

回答

2

这应该工作:

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' 

检查它在行动here on SEDE

+0

非常感谢,并感谢您向我介绍DataExplorer。很酷的东西。 –