tsql - 根据 TSQL 中的另一个表值更改返回的字段
问题描述
我有一个名为的表Measures
,其中包含不同字段中代码的结果值,具体取决于 PracticeID。例如:
PracticeID Code Value1 Value2
---------- ---- ------ ------
1 CX H null
2 CX null L
因此,对于 PracticeID = 1,结果在字段 Value1 中,对于 PracticeID = 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,是否有人知道任何解决方法?
提前致谢
解决方案
不确定您的示例数据有多人工,但对于这些特定数据,不需要转换表。coalesce()函数可以返回与 不同的第一个值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
如果样本数据过于简单并且您确实需要翻译,那么您可以使用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
推荐阅读
- mapbox - 与旧 Mapbox.js 相比,Mapbox GL JS 性能较差
- python - 如何用 abi 标签创建一个完整的轮子?
- vue.js - 当另一个观察者正在运行时取消观察任何观察者
- visual-studio-code - 如何使用 vscode 命令行附加远程容器?
- dymola - 在 Dymola 中使用“readTrajectory”函数编写向量
- mysql - 如何在mysql数据库中插入多部分表单数据?
- php - 使用 PHP 提供 ZIP 文件内容,无需解压缩到临时位置
- c# - 捕捉按键事件
- laravel - Laravel Route 未为 registercontroller 定义
- angular - 如何遍历数组并使用角度rxjs计算总和