我正在使用MS SQL Server 2008 R2。
我有以下查询选择一组属于同一属的植物。然后,它使用案例陈述来确定这些工厂中的任何一个是否属于一组taxonomyID。
最终查询结果包含所有工厂的列表,如果工厂属于taxonomyID组,则会显示“是”或“否”的列。
我想添加到此查询中。如果工厂属于taxonomyIDs组,我也希望在结果中看到该ID。所以基本上,除了显示“是”或“否”之外,我还想看看taxonomyID。也许工厂属于的每个taxonomyID的列?
我尝试将'fte.taxonomyID'添加到第一行,但找不到该列。
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 ;
答案 0 :(得分:1)
如果我理解正确,那么您需要在taxonomyID
表格中查找FT_Species
。这表明使用明确的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;
如果给定FT_Speciies
的{{1}}中有多行,则此查询可能会产生重复值。如果这是一个问题,那么您可能需要添加TypeId
。
编辑:
如果你想知道工厂是否在所有的ids中,那么你需要一个聚合和一些更多的逻辑。以下计算匹配分类的数量,并确保所有8个都存在:
group by