Sql server 检查是否找到特定记录,然后查找具有相同组的其他记录
我有一张桌子 主表Sql server 检查是否找到特定记录,然后查找具有相同组的其他记录,sql-server,Sql Server,我有一张桌子 主表 PROBLEM_ID PROBLEM PGROUP 1 Other Hardware Hardware 2 Error On hardware Hardware 3 PM Hardware 4 Service Maintenance 还有一个细节 TERM PROBLEM
PROBLEM_ID PROBLEM PGROUP
1 Other Hardware Hardware
2 Error On hardware Hardware
3 PM Hardware
4 Service Maintenance
还有一个细节
TERM PROBLEM PROBLEM_ID
S1G166901 PM 3
S1G166902 PM 3
S1G166903 Service 4
S1G166902 Other on hardware 1
S1G166901 Service 4
S1G166901 Other Hardware 1
S1G166901 Error on Hardware 2
我需要查询PROBLEM\u ID
='41',然后找到一个PROBLEM
具有PGROUP
='Hardware'
像这样
TERM PROBLEM PROBLEM_ID PGROUP
S1G166901 PM 3 Hardware
S1G166901 Other hardware 1 Hardware
S1G166901 Error on hardware 2 Hardware
S1G166902 PM 3 Hardware
S1G166902 Other Hardware 1 Hardware
我尝试使用外部应用程序,但返回的行太多
我的具体结果是,如果它们不包含PROBLEM\u ID
='41',则不会显示,但如果包含,则会按术语显示pgroup='Hardware'的所有问题
我试试这个
SELECT p.TERM, p.Problem_ID,p.problem, PGROUP
FROM Problem_log AS p
CROSS APPLY (
SELECT s.pgroup, s.problem_id
FROM problem AS s
WHERE s.problem_id = p.problem_id AND PGROUP = 'Hardware' )as s
WHERE exists (Select s.PGROUP,s.PROBLEM_ID
from PROBLEM_LOG
WHERE problem_log.PROBLEM_ID = '41' GROUP BY term)
ORDER BY TERM
我的顺序是
-从表problem_log中为problem_ID='41'选择数据
- 如果problem_ID='41',则针对每个记录检查发现其他问题(仅硬件)
SELECT D.TERM, D.PROBLEM, D.PROBLEM_ID, M.PGROUP
FROM Details D INNER JOIN Master M ON D.ProblemID = M.ProblemID
WHERE EXISTS (SELECT * FROM Details WHERE PRoblem = 'PM' AND TERM = D.TERM)
你能试试这个吗
SELECT dt.Term, dt.Problem, dt.ProblemID
FROM DetailsTable dt
JOIN MasterTable mt ON dt.ProblemID = mt.ProblemID
JOIN MasterTable mt1 ON mt.PGroup = mt1.PGroup and mt1.Problem = 'PM'
ORDER BY dt.Term
我认为这个问题应该适用于你的情况
Select DISTINCT D.TERM, M.PROBLEM, M.PROBLEM_ID, M.PGROUP
From Problem M Inner Join Problem_log D
ON M.PROBLEM=D.PROBLEM
WHERE (D.TERM IN (Select TERM FROM Problem_log D1 Inner Join Problem M1
ON M1.PROBLEM=D1.PROBLEM
Where D1.PROBLEM_ID=D.PROBLEM_ID And
M1.PGROUP='Hardware' AND D1.Problem='PM'))
ORDER BY TERM,PROBLEM
您可以在上尝试此查询,您只需要在主表中使用内部联接,并在select语句中使用PGROUP。@PareshJ我的具体结果是,如果它们不包含PM,则不会显示,但如果包含将按术语显示PGROUP='Hardware'的所有问题,但如果使用内部联接,则会显示所有问题,对吗?我只需要如果问题='PM'存在,你的代码几乎可以工作,但它仍然显示一个不包含'PM'的术语。在看到你的帖子之前,我尝试了我自己的方法。它与你的代码保持相同的结果。我不明白为什么子查询是必要的。在你的提琴里,我用组和问题条件代替了整件事。它给了我同样的结果。(当然,在两个表中都有问题文本可能也是个坏主意。)@shawnt00看看我的编辑历史,我以前也做过同样的事情。但是,它没有在OP的数据库中显示正确的结果。我不知道怎么做,但它工作正常。