Sql 正在尝试获取具有yes,no值的新列

Sql 正在尝试获取具有yes,no值的新列,sql,sql-server,Sql,Sql Server,我有两张桌子: 具有列的短名单文件夹(folderid、foldername、userid) 具有列的入围用户(folderid、shortlisteduserid) 它们与folderid关联 我使用下面的查询来获取由userid50创建的文件夹列表,并计算出50已在每个文件夹中列出了多少用户 select a.folderid,a.foldername,count(b.ShortlistedUserId) as [count] from tblshortlistfolders a left

我有两张桌子:

  • 具有列的短名单文件夹(folderid、foldername、userid)
  • 具有列的入围用户(folderid、shortlisteduserid) 它们与folderid关联
  • 我使用下面的查询来获取由userid50创建的文件夹列表,并计算出50已在每个文件夹中列出了多少用户

    select a.folderid,a.foldername,count(b.ShortlistedUserId) as [count]
    from tblshortlistfolders a left outer join tblshortlistedusers b on a.folderid=b.folderid 
    where a.userid = 50
    group by a.folderid,a.foldername
    
    现在我想在这个结果中再添加一列,每行的值如下

  • 如果folderid在tblshortlistedusers用户ID中包含49,则 值='是'
  • 如果folderid在tblshortlistedusers用户ID中不包含49 然后值='no'
  • 但当我以某种方式应用此条件时,列计数不会显示正确的值,并且结果不会按文件夹分组。结果中显示了同一文件夹的多行


    如果您显示了您尝试的查询,那么如何获取所需的表结果(folderid、foldername、totalcount、“newcolumn”)

    。我想这可能会满足你的要求:(根据记忆)

    编辑: 也许我误解了你的数据。下面是一个完整的示例,其中包含一些示例数据:

    use tinker -- or whatever test db you have.
    
    CREATE TABLE tblshortlistfolders (
     folderid     INT NOT NULL primary key
    ,foldername   NVARCHAR(255)
    ,userid       INT NOT NULL
    );
    
    CREATE TABLE tblshortlistedusers (
     folderid            INT NOT NULL
    ,shortlisteduserid   INT NOT null
    ,constraint fk_tblshortlistedusers_folderid foreign key (folderid) references [dbo].[tblshortlistfolders]
    );
    
    INSERT INTO tblshortlistfolders VALUES ( 100 , 'one'   ,  1); -- created by user 1
    INSERT INTO tblshortlistfolders VALUES ( 200 , 'two'   , 50); -- created by user 50
    INSERT INTO tblshortlistfolders VALUES ( 300 , 'three' , 50); -- created by user 50
    INSERT INTO tblshortlistfolders VALUES ( 400 , 'four'  , 49); -- created by user 49
    
    INSERT INTO tblshortlistedusers VALUES ( 100,  1); -- shortlisted by 50
    INSERT INTO tblshortlistedusers VALUES ( 100, 50); -- shortlisted by 01 too
    INSERT INTO tblshortlistedusers VALUES ( 200, 50); -- shortlisted by 50
    INSERT INTO tblshortlistedusers VALUES ( 200, 49); -- shortlisted by 49 too
    INSERT INTO tblshortlistedusers VALUES ( 300, 50); -- shortlisted by 50
    INSERT INTO tblshortlistedusers VALUES ( 300, 50); -- shortlisted by  1 too
    
    SELECT a.folderid,a.foldername,COUNT(b.ShortlistedUserId) AS [COUNT]
    ,CASE WHEN COUNT(CASE WHEN b.ShortlistedUserId=49 THEN 1 ELSE NULL END)>0 THEN 'Yes' ELSE 'No' END AS [NewColumn]
    FROM tblshortlistfolders a LEFT OUTER JOIN tblshortlistedusers b ON a.folderid=b.folderid 
    WHERE a.userid = 50
    GROUP BY a.folderid,a.foldername
    

    这就是我从你的问题中理解的。也许你可以举个例子说明你想要什么?

    即使我是这样做的,但问题是该文件夹中的用户数始终为零,其中不包含用户49。。nd包含userid 49的文件夹显示其中包含的用户总数的正确计数..:(请查看我提供的示例,让我们知道这与您期望的有什么不同?表b没有userid列,当我将其替换为ShortlistedUserId时,在groupby子句中,它为单个用户提供了单行,即为单个文件夹提供了多行:(
    select 
        a.folderid,
        a.foldername,
        count(b.ShortlistedUserId) as [count],
        case when b.userid = 49 then 'yes' else 'no' end as [newcolumn]
    from 
        tblshortlistfolders a 
        left outer join tblshortlistedusers b on a.folderid=b.folderid 
    where a.userid = 50
    group by a.folderid,a.foldername
    
    select 
        a.folderid,
        a.foldername,
        count(b.ShortlistedUserId) as [count],
        case when b.userid = 49 then 'yes' else 'no' end as [newcolumn]
    from 
        tblshortlistfolders a 
        left outer join tblshortlistedusers b on a.folderid=b.folderid 
    where a.userid = 50
    group by a.folderid,a.foldername