2016-07-22 6 views
0

私はスポーツレフリーのゲームスケジュールを示す一連のデータを持っています。ほとんどの場合、2人のレフェリーが各ゲームで一緒に働きます。ここに私のクエリは次のとおりです。いくつかの列を除いて2つのデータ行を圧縮する

GroupName  EventDate EvtTime SiteName    SubSite   Email    FirstName LastName Phone1 
============================================================================================================================== 
Hoops Forever 8/10/2016 8:00  Kennedy High School Court #33 BMJ [email protected] Jeff  Smith  8014445555 
Hoops Forever 8/10/2016 8:00  Kennedy High School Court #33 BMJ [email protected] Kris  Jones  8013331111 
Hoops Forever 8/10/2016 9:20  Kennedy High School Court #33 BMJ [email protected] Jeff  Smith  8014445555 
Hoops Forever 8/10/2016 9:20  Kennedy High School Court #33 BMJ [email protected] Kris  Jones  8013331111 
Hoops Forever 8/10/2016 10:40 Kennedy High School Court #33 BMJ [email protected] Jeff  Smith  8014445555 
Hoops Forever 8/10/2016 10:40 Kennedy High School Court #33 BMJ [email protected] Kassy  Hanks  8019997777 
Hoops Forever 8/10/2016 12:00 Kennedy High School Court #33 BMJ [email protected] Michael Rogers  8010001111 
Hoops Forever 8/10/2016 12:00 Kennedy High School Court #33 BMJ [email protected] Kris  Jones  8013331111 
Hoops Forever 8/10/2016 13:20 Kennedy High School Court #33 BMJ [email protected] Michael Rogers  8010001111 
Hoops Forever 8/10/2016 13:20 Kennedy High School Court #33 BMJ [email protected] Kris  Jones  8013331111 

今トップ2行を見て、2行の間のすべての値が同じであることに気づく:

SELECT DISTINCT g.GroupName, date(s.EventDate) AS EventDate, DATE_FORMAT(s.EventDate,'%H:%i:%s') AS EventTime, l.SiteName, ss.SubSiteName, u.Email, u.FirstName, u.LastName, u.Phone1 
FROM Schedule s 
JOIN Groups g 
ON s.GroupID = g.GroupID 
LEFT OUTER JOIN Sites l 
ON s.SiteID = l.SiteID 
LEFT OUTER JOIN SubSites ss 
ON l.SiteID = ss.SiteID 
LEFT OUTER JOIN Users u 
ON s.UserID = u.UserID 
WHERE g.OrganizationID = 2 
AND s.EventDate > DATE_ADD(NOW(), INTERVAL 0 HOUR) 
AND (s.SubSiteID = 0 OR s.SubSiteID = ss.SubSiteID) 
ORDER BY l.SiteName, ss.SubSiteName, s.EventDate, u.LastName 

そして、ここでは、そのクエリによって生成されるレコードの一部ですレフリーに固有の最後の4列を除きます。それでは、私が試したことは、この追加しました:

GROUP BY GroupName, EventDate, EvtTime, SiteName, SubSite 

をそして、それが中途半端そこに私を得たが、私は各グループにおける第二審判失わ:

GroupName  EventDate EvtTime SiteName    SubSite   Email    FirstName LastName Phone1 
============================================================================================================================== 
Hoops Forever 8/10/2016 8:00  Kennedy High School Court #33 BMJ [email protected] Jeff  Smith  8014445555 
Hoops Forever 8/10/2016 9:20  Kennedy High School Court #33 BMJ [email protected] Jeff  Smith  8014445555 
Hoops Forever 8/10/2016 10:40 Kennedy High School Court #33 BMJ [email protected] Jeff  Smith  8014445555 
Hoops Forever 8/10/2016 12:00 Kennedy High School Court #33 BMJ [email protected] Michael Rogers  8010001111 
Hoops Forever 8/10/2016 13:20 Kennedy High School Court #33 BMJ [email protected] Michael Rogers  8010001111 

をし、さらに苦もなく、ここで私が本当に必要なものです:

GroupName  EventDate EvtTime SiteName    SubSite   Email1   FN1  LN1  Phone1  EMail2   FN2  LN2  Phone2 
========================================================================================================================================================================= 
Hoops Forever 8/10/2016 8:00  Kennedy High School Court #33 BMJ [email protected] Jeff  Smith 8014445555 [email protected] Kris Jones 8013331111 
Hoops Forever 8/10/2016 9:20  Kennedy High School Court #33 BMJ [email protected] Jeff  Smith 8014445555 [email protected] Kris Jones 8013331111 
etc........... 

私の所望の結果セットに、(REF特異的ではなく、ゲーム固有の)異なる4列は「圧縮」行に追加されることに注意してください。論理的にはそれは理にかなっています:1つの試合がありますが、2つの試合があります。私はその1つのゲームの情報が1行になるようにしたい、そして2つのrefsの情報も同じ行に追加し、最後に追加したい。実際のDBには2行ありますが、それらを結合して追加します。審判の情報がない場合、私はただヌル/空白を残すことを望んでいます。

これでSQLはどのように構築されましたか?事前にありがとう!

答えて

1

同じ列に両方の参照文献を保存するために許容されている場合 - あなたは使用することができます:

  1. (最大を取得します。

    GROUP_CONCAT(column SEPARATOR ',') 
    

    別の解決策がわからグループで唯一の2つの行があります電子メール)と第2の分(電子メール)

  2. 電子メールで参加したテーブルからレフリーフィールドの残りを取得します。
+0

MAXとMINが最も簡単な方法です。ありがとうございました。私のSELECT行は次のとおりです: 'SELECT DISTINCT s.EventName、s.EventDate AS FullDate、date(s.EventDate)AS EventDate、 DATE_FORMAT(s.EventDate、 '%H:%i:%s')AS EventTime、DAYNAME( CONCAT(MAX(u.FirstName)、 ''、MIN(u.LastName))AS Ref1、 CONCAT(MAX(s.EventDate))AS日DayOfWeek、 s.AcceptedDate、g.GroupName、l.SiteName、ss.SubSiteName、CONCAT (u.FirstName)、 ''、MAX(u.LastName))AS Ref2' – HerrimanCoder

関連する問題