根据TSQL中的另一个表值更改返回的字段



我有一个名为Measures的表,它根据PracticeID在不同字段中包含代码的结果值。例如:

PracticeID Code Value1 Value2
---------- ---- ------ ------
1          CX   H      null
2          CX   null   L

因此,对于PracticeID=1,结果在字段Value1中,对于PraticeID=2,结果在相同代码的字段Value2中。

如果我创建了一个翻译表Measure_Translate,它存储了哪个字段将用于特定实践ID中的特定代码。例如:

PracticeID Code ColumnName
---------- ---- ----------
1          CX   Value1
2          CX   Value2

有没有任何方法可以使用Measure_Translate表来动态确定需要使用哪个字段来返回度量值(在本例中为CX(?

例如:

select m.PracticeID, m.Code,
--then dynamically get which Value field based on what is in the ColumnName
--field in Measure_Translate
from Measure as m
join Measure_Translate as t on t.PracticeID = m.PracticeID and t.Code = m.Code

如果你不能动态地更改实际的tsql,有人知道有什么解决办法吗?

提前感谢

不确定示例数据有多人工,但对于这种特定的数据,不需要转换表。函数可以返回不同于null的第一个值。

样本数据

create table Measures
(
PracticeId int,
Code nvarchar(2),
Value1 nvarchar(1),
Value2 nvarchar(1)
);
insert into Measures (PracticeId, Code, Value1, Value2) values
(1,'CX','H',Null),
(2,'CX',Null,'L');

解决方案

select m.PracticeId,
m.Code,
coalesce(m.Value1, m.Value2) as Value
from Measures m;

结果

PracticeId Code Value
---------- ---- -----
1          CX   H
2          CX   L

Fiddle


如果样本数据过于简单化,并且您确实需要转换,那么您可以使用case表达式。

样本数据扩展

insert into Measures (PracticeId, Code, Value1, Value2) values
(3,'CX','H','L');
create table Measure_Translations
(
PracticeId int,
Code nvarchar(2),
ColName nvarchar(20)
);
insert into Measure_Translations (PracticeId, Code, ColName) values
(1,'CX','Value1'),
(2,'CX','Value2'),
(3,'CX','Value2');

解决方案

包含coalesce()case方法以突出显示差异。

select m.PracticeId,
m.Code,
coalesce(m.Value1, m.Value2) as Value_coalesce,
case mt.ColName
when 'Value1' then m.Value1
when 'Value2' then m.Value2
end as Value_translation
from Measures m
join Measure_Translations mt
on  mt.PracticeId = m.PracticeId
and mt.Code = m.Code;

结果

PracticeId Code Value_coalesce Value_translation
---------- ---- -------------- -----------------
1          CX   H              H
2          CX   L              L
3          CX   H              L                 --> difference

扩展小提琴

最新更新