使用子字符串检索外键值

时间:2016-07-26 14:13:34

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

我从名为DrugEvents的表中得到以下输出表,其中Age列具有年龄值及其单位。我用来得到下表的查询如下。

enter image description here

单位值在另一个名为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单位值匹配的FKAgeUnitID?也就是说,对于第一个记录,它应该找到" YR"在" 61 YR"并获取其AgeUnitID并在上面的查询中选择我当前拥有d.Age。请指教。

1 个答案:

答案 0 :(得分: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列表中已经使用的逻辑相同的逻辑