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