2016-07-22 2 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 

을 그리고 그 중간이 나있어,하지만 난 각 그룹에서 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 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........... 

공지 나의 원하는 결과 집합, 다른 4 개의 열 (REF 특정보다는 특정 게임)은 "압축"행에 추가된다. 논리적으로 말하면 : 1 개의 게임이 있지만 2 개의 심판이 있습니다. 그 1 게임에 대한 정보가 1 행에 있도록하고 싶습니다. 그리고 2 개의 refs에 대한 정보도 같은 행에 추가하고 끝에 추가해야합니다. 실제 DB에는 2 개의 행이 있지만, 나는 그것들을 결합하고 추가하고 싶다. 거기에 심판 정보가없는 경우에는, 그냥 nulls/공백을 원한다 - 아무것도 공상.

이렇게 SQL은 어떻게 구성되어 있습니까? 미리 감사드립니다. 이 같은 열에서 모두 심판을 저장하기 위해 허용되는 경우

답변

1

- 당신은 사용할 수 있습니다 :

GROUP_CONCAT(column SEPARATOR ',') 

또 다른 해결책을 확실 그룹의 두 행이있을 때 :

  1. (최대 받기 이메일) 첫 번째 분과 분 (이메일) 초 단위
  2. 전자 메일을 통해 참가한 테이블의 나머지 심판 필드를 가져옵니다.
+0

MAX와 MIN이 가장 쉬운 접근 방법임이 입증되었습니다. 감사합니다 Nosyara. 내 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, (u.FirstName), '', MAX (u.LastName)) AS Ref2' – HerrimanCoder

관련 문제