【问题标题】:Values of columns in first table refer to column names in second table. How to pull the values from second table?第一个表中的列值是指第二个表中的列名。如何从第二个表中提取值?
【发布时间】:2011-05-03 22:57:27
【问题描述】:

第一篇文章,已经广泛搜索了一个月的答案,我想我会问专家。

我已在一个表格中填充了已在医院接受服务的患者帐户。我正在拉列列出执行医生的每个程序。这些列的值是序列号,它们将我指向第二个表中的一组列。第二个表中的列实际上包含我需要的医师标识符。

例子:

表 1

Account:       Phys_Proc1     Phys_Proc2     PhysProc3     PhysProc4     PhysProc5`

Patient1       2              5              1             4             5
Patient2       1              3              3             4             0
Patient3       2              0              0             0             0

表 2

Account:       Physician1     Physician2     Physician3    Physician4    Physician5

Patient1       500123         500456         500789        600123        600456
Patient2       400321         500700         300876        456789        987654
Patient3       300500         800700         0             0             0

我需要使用表 2 中的值更新表 1 中的记录,其中表 1 中的值是指表 2 中的列名。

示例

Patient1 执行了由“500456”执行的程序 1(Phys_Proc1 的值为“2”,指的是表 2 中的 Physician2 字段。)

任何帮助将不胜感激。即使是在这一点上的提示也会给我一个方向。将我指向一个特定的函数名称进行搜索比我现在拥有的更好(什么都没有。)我尝试了一个广泛的 CASE 语句,但它没有提取值每个患者帐户,并从表 2 中提取第一个帐户的值并将其应用于所有患者记录。

【问题讨论】:

  • 就我个人而言,我会重新设计以正确规范化表格,然后您就不会有这个噩梦了。我将创建一个患者表、一个医生表和一个程序表,然后创建一个包含 PatientId、PhysicianID、ProcedureId 和日期的表。

标签: sql tsql


【解决方案1】:
UPDATE Table2 
SET 
Physc_Proc1 = 
    CASE WHEN Phys_Proc1 = 1 Then Table2.Physician1 
    CASE WHEN Phys_Proc1 = 2 Then Table2.Physician2 
    CASE WHEN Phys_Proc1 = 3 Then Table2.Physician3 
    CASE WHEN Phys_Proc1 = 4 Then Table2.Physician4 
    CASE WHEN Phys_Proc1 = 5 Then Table2.Physician5
    ELSE NULL 
END, 

Physc_Proc2 = 
    CASE WHEN Phys_Proc2 = 1 Then Table2.Physician1 
    CASE WHEN Phys_Proc2 = 2 Then Table2.Physician2 
    CASE WHEN Phys_Proc2 = 3 Then Table2.Physician3 
    CASE WHEN Phys_Proc2 = 4 Then Table2.Physician4 
    CASE WHEN Phys_Proc2 = 5 Then Table2.Physician5
    ELSE NULL 
END, 

PhyscProc3 = 
    CASE WHEN PhysProc3 = 1 Then Table2.Physician1 
    CASE WHEN PhysProc3 = 2 Then Table2.Physician2 
    CASE WHEN PhysProc3 = 3 Then Table2.Physician3 
    CASE WHEN PhysProc3 = 4 Then Table2.Physician4 
    CASE WHEN PhysProc3 = 5 Then Table2.Physician5
    ELSE NULL 
END, 

PhyscProc4 = 
    CASE WHEN PhysProc4 = 1 Then Table2.Physician1 
    CASE WHEN PhysProc4 = 2 Then Table2.Physician2 
    CASE WHEN PhysProc4 = 3 Then Table2.Physician3 
    CASE WHEN PhysProc4 = 4 Then Table2.Physician4 
    CASE WHEN PhysProc4 = 5 Then Table2.Physician5
    ELSE NULL 
END, 

PhyscProc5 = 
    CASE WHEN PhysProc5 = 1 Then Table2.Physician1 
    CASE WHEN PhysProc5 = 2 Then Table2.Physician2 
    CASE WHEN PhysProc5 = 3 Then Table2.Physician3 
    CASE WHEN PhysProc5 = 4 Then Table2.Physician4 
    CASE WHEN PhysProc5 = 5 Then Table2.Physician5
    ELSE NULL 
END
FROM Table2
INNER JOIN Table1
ON Table2.Account = Table1.Account

注意:我没有尝试过这个语法。我希望这能让您了解如何进一步进行。

【讨论】:

  • 你是真正的男人中的神。这正是我所需要的。进行了一些小的调整以匹配我的环境,并且效果很好。谢谢你,你不知道你有多少帮助。
猜你喜欢
  • 2019-09-27
  • 2020-04-08
  • 1970-01-01
  • 2019-12-21
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 1970-01-01
相关资源
最近更新 更多