【问题标题】:Retrieving foreign key value using substring使用子字符串检索外键值
【发布时间】:2016-07-26 14:13:34
【问题描述】:

我有一个名为 DrugEvents 的表的以下输出表,其中 Age 列具有年龄值及其单位。我用来获取下表的查询如下所示。

单位值可在另一个名为 AgeUnit 的表中找到。此表有一个名为 AgeUnitID 的主键和另一个名为 AgeUnitNAme 的列。我需要将值插入到名为 Patient 的表中,以检索年龄、性别、体重、国家和 FKAgeUnitID。目前我有以下查询。

 SELECT SUBSTRING(d.Age, 1, CASE CHARINDEX(' ', d.Age)
    WHEN 0
        THEN LEN(d.Age)
    ELSE CHARINDEX(' ', d.Age) - 1
    END) AS Age,
    Sex,
    SUBSTRING(d.[Weight], 1, CASE CHARINDEX(' ', d.[Weight])
    WHEN 0
        THEN LEN(d.[Weight])
    ELSE CHARINDEX(' ', d.[Weight]) - 1
    END) AS [Weight],
    Country,
    d.Age
FROM DrugEvents d

在上面的查询中,我选择了 d.Age 而不是 FKAgeUnitID。如何选择与 Age 列中的 Age unit 值匹配的 FKAgeUnitID?也就是说,对于第一条记录,它应该在“61 YR”中找到“YR”并获取它的 AgeUnitID 并在上面的查询中选择我目前拥有 d.Age 的那个。请指教。

【问题讨论】:

  • 一张表中有 2 个 Age 列 - 这是不可能的。
  • 该输出是我运行的选择查询。第二个年龄列应该是 FKAgeUnitID。它显示年龄,因为我在上述查询中给出了 d.age
  • 你的问题从字面上开始I have the below table called DrugEvents...
  • 年龄列中的所有值都是'YR'。还有其他单位吗?
  • 是的,他们是 YR、HR 和 MIN

标签: sql sql-server substring inner-join sql-server-2014


【解决方案1】:

您可以在 JOIN 子句的 ON 条件中使用 SUBSTRING():

SELECT au.AgeUnitID,
       d.Age
    --,other columns
FROM DrugEvents d
JOIN AgeUnit au
ON au.AgeUnit = SUBSTRING(d.Age, CHARINDEX(' ', d.Age), LEN(d.Age))

与您在 SELECT 列表中的方式相同。那是你想要的吗?

这假定年龄和单位总是存在并以空格分隔,但如果不是这种情况,那么再次,您可以使用您在 SELECT 列表中已经使用的相同逻辑。

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多