Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用子字符串检索外键值_Sql_Sql Server_Substring_Inner Join_Sql Server 2014 - Fatal编程技术网

Sql 使用子字符串检索外键值

Sql 使用子字符串检索外键值,sql,sql-server,substring,inner-join,sql-server-2014,Sql,Sql Server,Substring,Inner Join,Sql Server 2014,下面是一个名为DrugEvents的表的输出表,其中Age列有Age值及其单位。下面给出了我用来获取下表的查询 单位值可在另一个名为AgeUnit的表中找到。此表有一个名为AGEUNID的主键和另一个名为AgeUnitNAme的列。我需要在名为Patient的表中插入值,检索年龄、性别、体重、国家和FKAgeUnitID。目前我有以下查询 SELECT SUBSTRING(d.Age, 1, CASE CHARINDEX(' ', d.Age) WHEN 0 THEN

下面是一个名为DrugEvents的表的输出表,其中Age列有Age值及其单位。下面给出了我用来获取下表的查询

单位值可在另一个名为AgeUnit的表中找到。此表有一个名为AGEUNID的主键和另一个名为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。如何选择与“年龄”列中的年龄单位值相匹配的FKAGEUNIID?也就是说,对于第一条记录,它应该在“61 YR”中找到“YR”,并获取其AGEUTID,然后在上面的查询中选择我当前有d Age的位置。请注意。

您可以在JOIN子句的ON条件中使用子字符串()

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))
与选择列表中的方式相同。这是你想要的吗

这假设年龄和单位始终存在且以空格分隔,但如果情况并非如此,则同样可以使用与选择列表中已使用的逻辑相同的逻辑。

可以在JOIN子句的ON条件中使用子字符串()

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))
与选择列表中的方式相同。这是你想要的吗


这假设年龄和单位始终存在且以空格分隔,但如果情况并非如此,则可以再次使用与选择列表中已使用的逻辑相同的逻辑。

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