Sql 具有多条记录的ID-如何找到我需要的记录?
我有一个表Job Types,其中包含完成工作的人的ID、工作完成的年份YYYY和Jobtype IDSql 具有多条记录的ID-如何找到我需要的记录?,sql,sql-server,Sql,Sql Server,我有一个表Job Types,其中包含完成工作的人的ID、工作完成的年份YYYY和Jobtype ID |ID | YEAR | JOBTYPE| |123A| 2017 |1 |124A| 2017 |2 |125A| 2016 | 2 |126A| 2017 |3 |123A| 2017 |2 |125A| 2016 |2 我需要的是找到2017年仅完成Jobtype 2的每个人的ID。在上表中,这仅为124A。2016年完成125
|ID | YEAR | JOBTYPE|
|123A| 2017 |1
|124A| 2017 |2
|125A| 2016 | 2
|126A| 2017 |3
|123A| 2017 |2
|125A| 2016 |2
我需要的是找到2017年仅完成Jobtype 2的每个人的ID。在上表中,这仅为124A。2016年完成125A项工作类型2;123A分别为1和2;等旁注:如果一个ID在2017年完成了多个Jobtype 2s,这无关紧要——我想要这些记录
我该怎么做?我尝试了一些notexists查询,但我想我被卡住了,因为1id可能有很多记录。我猜我需要以某种方式组合数据,使每个ID都有一条记录,然后以这种方式查询它?还是我遗漏了一些非常明显的东西?我在SQL Server 2012中工作,只是看不到前进的方向。抱歉,如果我遗漏了一些非常简单的内容,但我通常没有理由做select语句以外的任何事情。编写一个查询,以获取2017年作业类型完成数不是2的所有id,然后仅选择id不在第一次查询结果中的记录:
SELECT *
FROM table
WHERE jobtype = 2 and year = 2017
AND id NOT IN (SELECT id FROM table WHERE jobtype <> 2 and Year=2017)
编写一个查询以获取2017年作业类型完成不为2的所有id,然后仅选择id不在第一次查询结果中的记录:
SELECT *
FROM table
WHERE jobtype = 2 and year = 2017
AND id NOT IN (SELECT id FROM table WHERE jobtype <> 2 and Year=2017)
您需要每个ID的信息,所以请按ID分组。然后过滤。例如: 这些标准很容易调整。例如,其他人理解您的标准的意思是:2017年有一项或多项2017年2项记录,没有其他记录,而我理解为一项或多项2017年2项记录,没有其他记录。如果您只想看2017年:
select id
from jobtypes
where year = 2017
having min(jobtype) = 2
and max(jobtype) = 2
;
无论应用何种标准,该表只需读取一次。您需要每个ID的信息,所以请按ID分组。然后过滤。例如: 这些标准很容易调整。例如,其他人理解您的标准的意思是:2017年有一项或多项2017年2项记录,没有其他记录,而我理解为一项或多项2017年2项记录,没有其他记录。如果您只想看2017年:
select id
from jobtypes
where year = 2017
having min(jobtype) = 2
and max(jobtype) = 2
;
无论采用何种标准,表格只需阅读一次。希望这能奏效
SELECT * FROM #Your_Table A WHERE JobType=2 AND Year=2017 AND NOT EXISTS(
SELECT ID FROM (SELECT *,Row_number() Over(Partition by ID Order by ID) AS Row_Num FROM #Your_Table)B
WHERE JobType=2 and Row_num>1 and B.ID=A.ID)
希望这能奏效
SELECT * FROM #Your_Table A WHERE JobType=2 AND Year=2017 AND NOT EXISTS(
SELECT ID FROM (SELECT *,Row_number() Over(Partition by ID Order by ID) AS Row_Num FROM #Your_Table)B
WHERE JobType=2 and Row_num>1 and B.ID=A.ID)
啊!不在!非常感谢-我显然是在尝试创建一个比需要的复杂得多的解决方案!啊!不在!非常感谢-我显然是在尝试创建一个比需要的复杂得多的解决方案!