2011-12-01 4 views
1

별칭 나는 하나의 데이터베이스에서 데이터를 얻을 스키마가 다른 두 번째 데이터베이스의 형식에 넣어 노력하고있어. 나는 필드 이름을 변경하는 몇 가지 논리, 단일 행에 한 테이블의 여러 행에있는 데이터를 얻기 위해 노력하고있어. 나는 결과 테이블의 열쇠가 될 것입니다 고유 ID (encounterID)를 가지고 있고, 여러 행의 외래 키 것입니다. 여기 SQL 쿼리 테이블에 열을 행으로 이동하려면 플러스

내 원하는 출력 스키마, 임시 테이블 :

접두사 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 
) 

현재 다른 열에 있습니다. LeadValue가에

LeadID 
EncounterID 
LeadValue 
Amplitude 
PulseWidth 
Impedance 
Voltage 
Current 

('계시록은', '레벨', 'RvLv', '심방')와 EncounterID이 동일하고, LeadID는 고유 키입니다 : 내 소스 테이블 #tmpLeads에는 다음과 같은 열이 있습니다 필드의 각 행에 대해, 결과 테이블에있을 필요는 없습니다.

필자의 경우 각 EncounterID에 #tmpLeads에는 보통 두 행만 있지만 LeadValues는 위의 고유 한 LeadVal 중 두 가지가 될 수 있습니다 (절대로 두 개의 'Lv', 두 개의 'Rv'또는 'RvLv' 그러나 '레벨'과 '심방', 또는 '심방'과 '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에 나를 소개 주셔서 감사합니다. 멋진 것. –

관련 문제