2015-03-25 27 views
1

我有一個表另一個記錄檢查,如果再找到特定的記錄找到與同組

主表

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_ID查詢= '41'然後找到PROBLEMPGROUP ='硬件'

這樣

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_ID =「41」,那麼將不顯示,但如果含有會通過長期顯示出與PGROUP = '硬件' 的所有問題

我試試這個

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_ID = '41' 表problem_log選擇數據

  • 如果PROBLEM_ID = '41',那麼對於每個記錄檢查中發現的其他問題(僅硬件)
+0

你只需要擁有INNER JOIN與主表,並在SELECT語句中使用PGROUP此查詢。 – 2015-03-25 03:40:32

+0

@PareshJ @PareshJ我的具體結果是,如果他們不包含PM,那麼將不會顯示,但如果包含將按術語顯示pgroup ='Hardware'的所有問題,但如果我使用inner join,它會顯示所有權利?我只需要,如果問題='PM'存在 – 2015-03-25 03:44:28

回答

2

我認爲這個查詢應該適用於你的情況。

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 

您可以嘗試在fiddle

+0

我不明白爲什麼子查詢甚至是必要的。在你的小提琴中,我用PGROUP和問題條件替換了整個東西。它給了我相同的結果。 (當然,在兩張表中都有問題文本也可能是一個壞主意。) – shawnt00 2015-03-26 05:02:22

+0

@ shawnt00看看我的編輯歷史我之前也做過同樣的事情。但是,它沒有在OP的數據庫中顯示正確的結果。我不知道如何,但它工作正常。 – Shell 2015-03-26 05:12:29

0

你只需要使用INNER JOIN與主表獲得PGROUP每個ProblemID

檢查下面的查詢:

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) 
+0

您的代碼包含另一個組 – 2015-03-25 03:54:18

0

你可以試試這個

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 
+0

您的代碼幾乎工作,但它仍然顯示一個TERM,不包含'PM'我嘗試我自己的方式之前看到您的帖子它仍然是一樣的結果你的代碼 – 2015-03-25 06:15:03