SQL查询将表中的行移动到列,并添加别名
我试图从一个数据库中获取数据,并将其转换为第二个数据库的格式,其中模式不同。我试图将一个表的多行中的数据转换成一行,并使用一些逻辑来更改字段名。我将有一个唯一的ID(encounterID),它将是结果表中的一个键,并且是多行中的一个外键 这是我想要的输出模式,一个临时表:SQL查询将表中的行移动到列,并添加别名,sql,sybase,rows,calculated-columns,Sql,Sybase,Rows,Calculated Columns,我试图从一个数据库中获取数据,并将其转换为第二个数据库的格式,其中模式不同。我试图将一个表的多行中的数据转换成一行,并使用一些逻辑来更改字段名。我将有一个唯一的ID(encounterID),它将是结果表中的一个键,并且是多行中的一个外键 这是我想要的输出模式,一个临时表: CREATE TABLE #tmpSurgery ( EncounterID INT NULL, RvAmplitude DECIMAL(7,2) NULL, RvImpedance DECIMAL(7,2)
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-和ARIAL-的字段,用于振幅、脉冲宽度、阻抗、电压和电流。My Source table#TMCONTESS包含以下列:
LeadID
EncounterID
LeadValue
Amplitude
PulseWidth
Impedance
Voltage
Current
其中,LeadValue位于('Rv'、'Lv'、'RvLv'、'Atrial')中,EncounterID相同,LeadID是字段中每一行的唯一键,不需要在结果表中
在我的案例中,每次遇到的情况通常只有两行,但LeadValue可以是上述两个不同的LeadValue中的任意两行(决不是两个“Lv”、“两个”Rv或“RvLv”等,而是一个“Lv”和一个“心房”,或一个“心房”和一个“RvLv”)
最后,我的问题是:
如何从#tms请求更新#tmpSurgery中选择值,以便根据LeadValue更新适当的值,这样我就有一行了?这应该可以:
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'
请实际查看。非常感谢,并感谢您向我介绍DataExplorer。很酷的东西。