Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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 server中具有相同ID的行的条件_Sql_Join - Fatal编程技术网

检查sql server中具有相同ID的行的条件

检查sql server中具有相同ID的行的条件,sql,join,Sql,Join,我有一张如下的桌子 Id | CompanyName --- | --- 100 | IT 100 | R&D 100 | Financial 100 | Insurance 110 | IT 110 | Financial 110 | Product Based 111 | R&D 111 | IT 该表包含与上述结构类似的数据,但包含数千个类似的ID 我想找出所有公司名称是IT和R

我有一张如下的桌子

Id     |  CompanyName
---    |  ---
100    |  IT
100    |   R&D
100    |   Financial
100    |  Insurance
110    |  IT
110    |  Financial
110    |  Product Based
111    |  R&D
111    |  IT
该表包含与上述结构类似的数据,但包含数千个类似的ID

我想找出所有公司名称是IT和R&D的所有ID。如果对于任何ID,公司名称既不在,也不研发,那么不要考虑那些ID。 e、 g.id 100不能在此列表中,因为它有额外的公司名称作为财务,但id 111将被考虑,因为所有的公司都是it和R&D

有什么帮助吗?

我会这样做:

select id,
  sum(case when CompanyName='IT' OR CompanyName='R&D' then 1 else 0 end) as c1
from t
group by id
having count(*)=2 and c1=2
select id
from t
having sum(case when CompanyName not in ('IT', 'R&D') then 1 else 0 end) = 0 and
       sum(case when CompanyName in ('IT', 'R&D') then 1 else 0 end) = 2;  -- use "> 0" if you want either one.
注意:这假设表中没有重复项

SELECT DISTINCT Id
FROM companies
WHERE 
    Id NOT IN (
        SELECT DISTINCT Id
        FROM companies
        WHERE 
            CompanyName != 'IT'
            AND CompanyName != 'R&D'
    )
;
子查询:选择所有记录-仅
Id
,明显地-使用与“IT”和“R&D”不同的
CompanyName

主查询:选择所有不在上一个列表中的记录-仅
Id

结果111
使用选项“MS SQL Server 2014”和架构语法在上测试:

CREATE TABLE companies
    ([Id] int, [CompanyName] varchar(255))
;

INSERT INTO companies
    ([Id], [CompanyName])
VALUES
    (100, 'IT'),
    (100, 'R&D'),
    (100, 'Financial'),
    (100, 'Insurance'),
    (110, 'IT'),
    (110, 'Financial'),
    (110, 'Product Based'),
    (111, 'R&D'),
    (111, 'IT')
;

您使用的是哪个数据库/版本?我使用的是sql Server不是每个id都是这样,IT和研发应该在那里。它应该像每个公司的id一样工作。我们不必担心所有这些公司是否都应该在IT或研发中。因为你的案例不起作用,如果任何id只有一家公司,那么它就应该起作用。你的案例只起作用,所有公司都应该有强制性IT和研发事实并非如此。所有的公司都应该是IT或R&DOk
中的任何一家,c1>0
应该有效,或者
拥有count(*)=c1和count(*)0
。但是如果IT和保险的组合是IT和保险,那么总和将是1,根据c1>0将通过,但有另一家公司作为保险,但所有的公司都可以是IT或R&D,因此,它会失败的。这就是我所需要的。谢谢你。@Ritesh,不客气。如果是您的解决方案,请检查答案是否为“已接受”(票数下的绿色ckeck标记)。这样,其他用户也可以从正确的答案中受益。再见