2011-12-01 8 views
1

1つのデータベースからデータを取得し、そのスキーマが異なる2つ目のデータベースの形式に変換しようとしています。私は、フィールド名を変更するいくつかのロジックと、1つの行に1つのテーブルの複数の行にあるデータを取得しようとしています。私は結果テーブルのキーとなるユニークなID(encounterID)を持ち、複数の行にある外部キーです。ここでテーブル内の行と列を移動するSQLクエリ

は私の所望の出力スキーマ、一時テーブルです:振幅、PulseWidth(パルス幅)のための接頭辞RV-、LV-、RvLv-とAtrial-持つフィールドがあることを

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 
) 

お知らせ、インピーダンス、電圧、および現在異なる列にあります。私のソーステーブル#tmpLeads、次のカラムがあります

LeadValueは(「のRv」、「Lvを」、「RvLv」、「心房」)にあり、EncounterIDが同じで、かつLeadIDは一意のキーである
LeadID 
EncounterID 
LeadValue 
Amplitude 
PulseWidth 
Impedance 
Voltage 
Current 

フィールド内の各行に対して実行され、結果テーブル内にある必要はありません。

私の場合、通常EncounterIDごとに#tmpLeadsに2つの行しかありませんが、LeadValuesは上記の別々のLeadValueのいずれか2つ(決して2つの 'Lv'、2つの 'Rv'、または 'RvLv's、しかし、「左心室」と「心房」、または「心房」と「RvLv」)は

だから、最終的には、私の質問:。

にはどうすれば更新する#tmpLeadsから値を選択します#tmpSurgeryを使用して、LeadValueに基づいて適切な値を更新するので、1つの行がありますか?

答えて

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に紹介してくれてありがとうございます。クール。 –

関連する問題