2016-06-30 13 views
0

で明確な次のように私はこのクエリを持っている、それは正しい結果を返しますが、私はダウンlnk_ID(3列目)の選択を狭くするGROUP BYまたはDISTINCTを使用したいGROUP BYまたはマルチテーブルクエリ

私はそれらの両方を試しましたが、毎回失敗します。

SELECT dmg.dmg_FirstName, 
     dmg.dmg_Surname, 
     lnk.lnk_ID, 
     dlk.dlk_AssessDate, 
     dmg.dmg_Sex, 
     trn.ScotHealthboard 
FROM DAILY_LINK dlk 
JOIN Absent ab ON ab.ScotRefID = dlk.dlk_ID 
JOIN Link lnk ON lnk.lnk_ID = ab.Person_ID 
JOIN Demographic dmg ON dmg.dmg_ID = lnk.lnk_dmgID 
JOIN Training trn ON trn.Trn_ID = ab.Training_ID 
WHERE dlk.dlk_AssessDate >= '2015/01/01' AND dlk.dlk_AssessDate <= '2015/12/01' 
ORDER BY dmg.dmg_Surname, dmg.dmg_FirstName, lnk.lnk_ID; 





Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Richard Airey 566105926 15/01/2015 00:00:00 Male Tayside 
Richard Airey 566105926 15/01/2015 00:00:00 Male Tayside 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 

期待される結果

Nuha Abdelwahab 566106181 16/07/2015 00:00:00  Tayside 
Patricia Agnew 566106230 17/09/2015 00:00:00 Female Dumfries and Galloway 
Richard Airey 566105926 15/01/2015 00:00:00 Male Tayside 
Aileen Allan 566105477 25/09/2015 00:00:00 Female Forth Valley 

FAILED以下

SELECT dmg.dmg_FirstName, 
     dmg.dmg_Surname, 
     DISTINCT (lnk.lnk_ID), 
     dlk.dlk_AssessDate, 
     dmg.dmg_Sex, 
     trn.ScotHealthboard 
FROM DAILY_LINK dlk 
JOIN Absent ab ON ab.ScotRefID = dlk.dlk_ID 
JOIN Link lnk ON lnk.lnk_ID = ab.Person_ID 
JOIN Demographic dmg ON dmg.dmg_ID = lnk.lnk_dmgID 
JOIN Training trn ON trn.Trn_ID = ab.Training_ID 
WHERE dlk.dlk_AssessDate >= '2015/01/01' AND dlk.dlk_AssessDate <= '2015/12/01' 

AND

SELECT dmg.dmg_FirstName, 
     dmg.dmg_Surname, 
     lnk.lnk_ID, 
     dlk.dlk_AssessDate, 
     dmg.dmg_Sex, 
     trn.ScotHealthboard 
FROM DAILY_LINK dlk 
JOIN Absent ab ON ab.ScotRefID = dlk.dlk_ID 
JOIN Link lnk ON lnk.lnk_ID = ab.Person_ID 
JOIN Demographic dmg ON dmg.dmg_ID = lnk.lnk_dmgID 
JOIN Training trn ON trn.Trn_ID = ab.Training_ID 
WHERE dlk.dlk_AssessDate >= '2015/01/01' AND dlk.dlk_AssessDate <= '2015/12/01' 
GROUP BY lnk.lnk_ID; 
+0

狭いかを選択?期待される結果を示してください。 – jarlh

+0

その結果、重複する名前が多数表示されます。結果全体にDISTINCT LNK_ID値のようなIDがあります。 1分で何かを投稿します。 – morne

+0

あなたの出力によれば、単純に 'SELECT DISTINCT'に切り替えるのはそのトリックを行うようです。 – jarlh

答えて

2
SELECT DISTINCT --< Here ! 
     dmg.dmg_FirstName, 
     dmg.dmg_Surname, 
     lnk.lnk_ID, 
     dlk.dlk_AssessDate, 
     dmg.dmg_Sex, 
     trn.ScotHealthboard 
FROM DAILY_LINK dlk 
JOIN Absent ab ON ab.ScotRefID = dlk.dlk_ID 
JOIN Link lnk ON lnk.lnk_ID = ab.Person_ID 
JOIN Demographic dmg ON dmg.dmg_ID = lnk.lnk_dmgID 
JOIN Training trn ON trn.Trn_ID = ab.Training_ID 
WHERE dlk.dlk_AssessDate >= '2015/01/01' AND dlk.dlk_AssessDate <= '2015/12/01' 
ORDER BY dmg.dmg_Surname, dmg.dmg_FirstName, lnk.lnk_ID; 

OR

SELECT MAX(dmg.dmg_FirstName ) As dmg_FirstName, --< Aggregate 
     MAX(dmg.dmg_Surname ) As dmg_Surname, --< all 
     lnk.lnk_ID,        --< but GROUP BY expression 
     MAX(dlk.dlk_AssessDate) As dlk_AssessDate, 
     MAX(dmg.dmg_Sex  ) As dmg_Sex, 
     MAX(trn.ScotHealthboard) As ScotHealthboard 
FROM DAILY_LINK dlk 
JOIN Absent ab ON ab.ScotRefID = dlk.dlk_ID 
JOIN Link lnk ON lnk.lnk_ID = ab.Person_ID 
JOIN Demographic dmg ON dmg.dmg_ID = lnk.lnk_dmgID 
JOIN Training trn ON trn.Trn_ID = ab.Training_ID 
WHERE dlk.dlk_AssessDate >= '2015/01/01' AND dlk.dlk_AssessDate <= '2015/12/01' 
GROUP BY lnk.lnk_ID; 
+0

私は馬鹿だと感じる。ありがとう。私のSQLを間違いなくブラッシュアップする必要があります。 – morne

+0

彼は最初に答えたように、ベンにチックを与える必要があります。あなたをアップアップしました。 – morne

3

クエリから重複する行を削除する場合は、SELECTの後にキーワードDISTINCTを付けるだけです。 DISTINCT dmg.dmg_FirstName ...

+0

はい、私もそうだと思っていましたが、うまくいきません。私が試した例を載せます。 – morne

+0

@ Y.B。オファーに感謝しますが、心配はありません - あなたはあなたといっしょにもっと仕事をしました:) – Ben

+0

@ Y.B。ああ、あなたの集計(2番目のアプローチ)の使用は、実際には一種のクールだった - 私はそれを考えていた! :) – Ben