Sql 修改查询以显示成员资格

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

我正在使用MS SQL Server 2008 R2

下面的查询选择了一组属于同一属的植物。然后,它使用一个case语句来确定这些植物是否属于一组分类ID

最终的查询结果包含一个所有植物的列表,如果植物在分类ID组中,则会显示一列“是”或“否”

我想添加到这个查询中。如果植物属于分类ID组,我也希望在结果中看到该ID。因此,基本上,除了显示“是”或“否”,我还希望看到分类法ID。可能是植物所属的每个分类的一列

我尝试将'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 ;

如果我理解正确,那么您需要在
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列,说明植物是否在所有分类中呢?谢谢