Sql 修改查询以显示成员资格
我正在使用MS SQL Server 2008 R2 下面的查询选择了一组属于同一属的植物。然后,它使用一个case语句来确定这些植物是否属于一组分类ID 最终的查询结果包含一个所有植物的列表,如果植物在分类ID组中,则会显示一列“是”或“否” 我想添加到这个查询中。如果植物属于分类ID组,我也希望在结果中看到该ID。因此,基本上,除了显示“是”或“否”,我还希望看到分类法ID。可能是植物所属的每个分类的一列 我尝试将'fte.taxonomyID'添加到第一行,但找不到该列Sql 修改查询以显示成员资格,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我正在使用MS SQL Server 2008 R2 下面的查询选择了一组属于同一属的植物。然后,它使用一个case语句来确定这些植物是否属于一组分类ID 最终的查询结果包含一个所有植物的列表,如果植物在分类ID组中,则会显示一列“是”或“否” 我想添加到这个查询中。如果植物属于分类ID组,我也希望在结果中看到该ID。因此,基本上,除了显示“是”或“否”,我还希望看到分类法ID。可能是植物所属的每个分类的一列 我尝试将'fte.taxonomyID'添加到第一行,但找不到该列 SELEC
SELECT PlantTypeID ,
displayName ,
displayType ,
Genus = 2016 ,
member = CASE WHEN EXISTS ( SELECT 1
FROM FT_SPECIES fte
WHERE fte.TypeID = dtu.PlantTypeID
AND fte.taxonomyID IN ( 1994327868,
1994327869,
1994327870,
1994327871,
1994327877,
1994327878,
1994327879,
1994327880 ) )
THEN 'YES'
ELSE 'NO'
END
FROM DT_Plant_USERS AS dtu
WHERE dtu.Genus = 2016
ORDER BY member DESC ;
如果我理解正确,那么您需要在
FT_Species
表中查找taxonomyID
。这建议使用显式的join
而不是嵌套的select
:
SELECT PlantTypeID, displayName, displayType, 2016 as Genus,
fs.TaxonomyId,
(case when fs.TypeId is not NULL then 'YES' else 'NO' end) as member
FROM DT_Plant_USERS dtu left outer join
FT_Species fs
on fs.TypeId = dtu.PlantTyeId and
fte.taxonomyID IN (1994327868, 1994327869, 1994327870, 1994327871,
1994327877, 1994327878, 1994327879, 1994327880)
WHERE dtu.Genus = 2016
ORDER BY member DESC;
对于给定的TypeId
,当FT\u species
中有多行时,此查询可能会产生重复的值。如果这是一个问题,那么您可能需要添加一个分组依据
编辑:
如果您想知道工厂是否在所有ID中,那么您需要一个聚合和一些更多的逻辑。以下内容统计匹配分类的数量,并确保所有8个分类都存在:
SELECT PlantTypeID, displayName, displayType, 2016 as Genus,
(case when 8 =
count(distinct case when fte.taxonomyID IN (1994327868, 1994327869, 1994327870, 1994327871,
1994327877, 1994327878, 1994327879, 1994327880
)
then fte.taxonomyId
end)
then 'ALL' else 'NOT-ALL'
end) as member
FROM DT_Plant_USERS dtu left outer join
FT_Species fs
on fs.TypeId = dtu.PlantTyeId and
fte.taxonomyID IN (1994327868, 1994327869, 1994327870, 1994327871,
1994327877, 1994327878, 1994327879, 1994327880)
WHERE dtu.Genus = 2016
GROUP BY PlantTypeID, displayName, displayType
ORDER BY member DESC;
只需稍微更改一下您的案例陈述:
fte.taxonomyID IN(1994327868199432786919943278701994327871199943278711999432787819943278791994327880))然后'YES'+fte.taxonomyID ELSE'NO'结束
如果我需要显示一个YES/NO列,说明植物是否在所有分类中呢?谢谢