Member 12995602 Ответов: 2

Как разместить данные из 2-х табличных запросов в одной строке таблицы?


Я пытаюсь получить баллы от двух отдельных команд по боулингу на одной строке выходного стола.
Думаю, я могу сделать это с помощью 2 отдельных запросов select, используя соединения, как я показал ниже.

Входные таблицы, к которым я присоединился, таковы
Таблица Расписания
DATE	    HOME TEAM #	      AWAY TEAM #
2017-02-13	     6	                7
2017-02-13	     3	                2
2017-02-13	     9           	    8
2017-02-13	     4	                5
2017-02-13	    10	                1


таблица данных:
Date	TeamNum	Gm1	Gm2
12-09-16	4	726	811
12-09-16	6	540	573
12-09-16	5	450	480
12-09-16	7	640	497


Надеюсь, это не слишком сбивает с толку.
Любая помощь будет оценена по достоинству.
Спасибо

Что я уже пробовал:

SELECT 'DATE','Match','TEAM', 'HmTeamNo' ,'Game 1', 'Game 2', 'Game 3', 'Total' , 'Away Tm' 
UNION (SELECT `MatchDate`, 
                   FORMAT(MatchNumber,0), 
       				TEAM, 
                   FORMAT(HmTeamNo,0), 
                   FORMAT(SUM(gm1),0), 
                   FORMAT(SUM(gm2),0), 
                   FORMAT(SUM(gm3),0), 
                   FORMAT((SUM(gm1)+SUM(gm2)+SUM(gm3)),0) as "Ttl" , 
                   FORMAT(AwayTeamNo,0) 
FROM Rainbow_Lanes_Matches 
      JOIN Rainbow_Lanes ON 
week = MatchWeek AND TEAMNUM = HmTeamNo 
WHERE MatchWeek =21
 			GROUP BY team 
ORDER BY MatchNumber
      
      )


Думаю, что это должно работать, если повторю querie и менять команды хозяев поля переменной awayteam команды и повторите присоединиться, но получаю ошибки.

UNION (SELECT `MatchDate`, 
                   FORMAT(MatchNumber,0), 
       				TEAM, 
                   FORMAT(HmTeamNo,0), 
                   FORMAT(SUM(gm1),0), 
                   FORMAT(SUM(gm2),0), 
                   FORMAT(SUM(gm3),0), 
                   FORMAT((SUM(gm1)+SUM(gm2)+SUM(gm3)),0) as "Ttl" , 
FROM Rainbow_Lanes_Matches 
      JOIN Rainbow_Lanes ON 
week = MatchWeek AND TEAMNUM = AwayTeamNo 
WHERE MatchWeek =21
 			GROUP BY team 
ORDER BY MatchNumber
      
      )


Вторая таблица включает в себя результаты команд.


Выходные данные или таблица результатов будут выглядеть следующим образом:
DATE	Match	HmTm	 Gm1	 Gm2	   AwayTeam	         Gm1	Gm2	
13-02-17	1	4	     726	811	      9                  480	433
13-02-17	2	6	     540	573	      7	                 640	497

2 Ответов

Рейтинг:
19

Database Star

Я бы предложил использовать два подзапроса, как то, что вы сделали. Но вместо того, чтобы использовать UNION, я бы использовал JOIN, потому что вам нужно рассматривать их как две отдельные таблицы данных и получать только то, что вам нужно от каждой из них. Использование UNION может показать пустые результаты для некоторых записей.

Попробуйте этот запрос. Первый выбор определит ваши выходные данные, а подзапросы получат необходимые данные для домашней и выездной команд.

Надеюсь, это сработает для вас - я не уверен в вашей структуре таблицы, поэтому она может вызвать некоторые начальные синтаксические ошибки.

SELECT sub_home.MatchDate,
sub_home.MatchWeek,
sub_home.Team,
sub_home.HomeTeamNo,
sub_home.Game1,
sub_home.Game2,
sub_home.Game3,
sub_home.TotalScore
sub_away.AwayTeamNo,
sub_away.Game1,
sub_away.Game2,
sub_away.Game3,
sub_away.TotalScore
FROM (
	SELECT `MatchDate`, 
	FORMAT(MatchNumber,0) AS MatchNumber, 
	TEAM, 
	FORMAT(HmTeamNo,0) AS HomeTeamNo, 
	FORMAT(SUM(gm1),0) AS Game1, 
	FORMAT(SUM(gm2),0) AS Game2, 
	FORMAT(SUM(gm3),0) AS Game3, 
	FORMAT((SUM(gm1)+SUM(gm2)+SUM(gm3)),0) AS TotalScore
	FROM Rainbow_Lanes_Matches 
	JOIN Rainbow_Lanes ON week = MatchWeek AND TEAMNUM = HmTeamNo 
	GROUP BY team  
) sub_home
JOIN (
	SELECT `MatchDate`, 
	FORMAT(MatchNumber,0) AS MatchNumber, 
	TEAM, 
	FORMAT(AwayTeamNo,0) AS AwayTeamNo, 
	FORMAT(SUM(gm1),0) AS Game1, 
	FORMAT(SUM(gm2),0) AS Game2, 
	FORMAT(SUM(gm3),0) AS Game3, 
	FORMAT((SUM(gm1)+SUM(gm2)+SUM(gm3)),0) AS TotalScore 
	FROM Rainbow_Lanes_Matches 
	JOIN Rainbow_Lanes ON week = MatchWeek AND TEAMNUM = AwayTeamNo 
	GROUP BY team 
	ORDER BY MatchNumber
) sub_away
ON sub_home.matchnumber = sub_away.MatchNumber
AND sub_home.MatchWeek = sub_away.MatchWeek;


Member 12995602

Спасибо за Ваш вклад!
Он отлично работал с данными, которые были установлены на неделе = 21.
Это было использовано для проверки данных, как вы, вероятно, знаете.

Когда я удалил эти строки, то получил удвоение строк, а значения суммируются неправильно?

Я тестирую, но пока все выглядит хорошо.
Есть идеи, почему это не работает при просмотре более одной недели?

MatchDate MatchNumber HomeTeamNo Game1 Game2 Game3 TotalScore AwayTeamNo Game1 Game2 Game3 TotalScore
2016-12-19 1 8 1,288 1,223 1,248 3,759 4 1,581 1,682 1,529 4,792
2016-12-19 1 8 1,288 1,223 1,248 3,759 5 2,154 2,114 2,151 6,419
2017-01-16 4 4 3,443 3,862 3,841 11,146 3 1,740 1,803 1,696 5,239
2017-01-16 4 4 3,443 3,862 3,841 11,146 2 4,326 4,238 4,196 12,760
2017-01-16 4 4 3,443 3,862 3,841 11,146 9 784 826 699 2,309
2017-01-16 2 6 1,646 1,775 1,705 5,126 8 3,087 3,116 3,403 9,606
2017-01-16 2 6 1,646 1,775 1,705 5,126 7 1,776 2,051 1,977 5,804

Database Star

Я думаю, это потому, что для одного MatchNumber (например, MatchNumber 1) Существует несколько записей HomeTeam-AwayTeam.

Я только что обновил вышеприведенный запрос. Не могли бы вы попробовать еще раз? Я просто обновил его, чтобы присоединиться, а также на игровую неделю соревнований.

Выглядят ли данные теперь правильными?

Member 12995602

Спасибо за помощь.
Мне удалось заставить его работать так, как я хотел, во время тестирования в phpMyadmin.
Хотя при переносе кода в "табулизатор" на моем сайте он не показывал бы элементы с правой стороны (выездная команда) или второй запрос.
Возможно, я не могу использовать "представления" или соединения?
Он ничего не показывал бы справа от"команды гостей".
Будете ли вы искать другой способ перепроектировать то же самое, возможно, используя временные таблицы без соединений?
еще раз спасибо за помощь.
Рэй

Рейтинг:
1

Member 12995602

SELECT  "Date", "Wk", "Match", "Hm Team", "HDCP", "Gm 1", "Gm 2", "Gm 3", "Ttl","Away Team","HDCP", "Gm 1", "Gm 2", "Gm 3", "Ttl"   
UNION     

(SELECT 	
sub_home.MatchDate,
sub_home.MatchWeek,
sub_home.Matchnumber,
sub_home.HomeTeamNo,
sub_home.HDCP,
/*  sub_home.Bowler,  */
sub_home.Game1,
sub_home.Game2,
sub_home.Game3,
sub_home.TotalScore,

sub_away.AwayTeamNo,
sub_away.HDCP,
sub_away.Game1,
sub_away.Game2,
sub_away.Game3,
sub_away.TotalScore

 FROM 
(SELECT 
	`MatchDate`, 
 	FORMAT(MatchWeek,0) AS MatchWeek, 	
 	FORMAT(MatchNumber,0) AS MatchNumber, 
	TEAM, 
	FORMAT(HmTeamNo,0) AS HomeTeamNo, 

FORMAT ((250 -( SELECT SUM(Gm1+Gm2+Gm3) / ( SELECT COUNT(Gm1)*3)*0.8)),0) AS HDCP,
 
 
        FORMAT(SUM(gm1),0) AS Game1, 
	FORMAT(SUM(gm2),0) AS Game2, 
	FORMAT(SUM(gm3),0) AS Game3, 
	FORMAT((SUM(gm1)+SUM(gm2)+SUM(gm3)),0) AS TotalScore
	FROM Rainbow_Lanes_Matches 
	JOIN Rainbow_Lanes ON week = MatchWeek 
		AND TEAMNUM = HmTeamNo 
 									WHERE `Week` >= 19 
	GROUP BY `Match_id` 

 ORDER BY `MatchWeek` AND `MatchNumber`
) 
sub_home
JOIN (SELECT 
	`MatchDate`, 
 	FORMAT(MatchWeek,0) AS MatchWeek, 
    FORMAT(MatchNumber,0) AS MatchNumber, 
	TEAM, 
	FORMAT(AwayTeamNo,0) AS AwayTeamNo, 
FORMAT ((250 -( SELECT SUM(Gm1+Gm2+Gm3) / ( SELECT COUNT(Gm1)*3)*0.8)),0) AS HDCP,
      FORMAT(SUM(gm1),0) AS Game1, 
	FORMAT(SUM(gm2),0) AS Game2, 
	FORMAT(SUM(gm3),0) AS Game3, 
	FORMAT((SUM(gm1)+SUM(gm2)+SUM(gm3)),0) AS TotalScore 
	FROM Rainbow_Lanes_Matches 
	JOIN Rainbow_Lanes ON week = MatchWeek 
      AND TEAMNUM = AwayTeamNo
       								WHERE `Week` >= 19 
	GROUP BY `Match_id`
	ORDER BY `MatchWeek` AND `MatchNumber`
) 

sub_away
ON sub_home.matchnumber = sub_away.MatchNumber
AND sub_home.MatchWeek = sub_away.MatchWeek);