首页 > 解决方案 > 根据 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,是否有人知道任何解决方法?

提前致谢

标签: tsqldynamic

解决方案


不确定您的示例数据有多人工,但对于这些特定数据,不需要转换表。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

延长小提琴


推荐阅读