Member 12995602 Ответов: 0

Как вставить оператор рабочего случая в другой код?


У меня есть это рабочее заявление case, которое дает мне ценность.
Попытка добавить операторы select перед тем, как дать информацию о результирующем значении, но получить ошибку или получить 2 отдельные строки данных?

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

Конечно, это должно быть просто, но просто не может заставить его работать?

Думал, что мне, возможно, придется поместить это в переменную, но получил ошибки и в этом тоже?

Я использую базу данных sql до 2012 года

выборочные данные:
Team	        Bowler	        Gm1	Gm2	Gm3	Ttl	Max Score
FOUL 5 MINUS 1	RICK CAMPBELL	234	314	226	774	314
FULL HOUSE	   JEANNE GIRARD	243	249	239	731	249
4 SURE	           JIM SILVER	195	208	302	705	302
3 SMART ASSES	  LARRY CROSS	199	231	276	706	276


ВЫХОД БЕЗ НОВОГО КОРПУСА:
Date	Wk	Tm	Team	Bowler	WK TOTAL	GRAND TTL	GMS	AVG	HSS	HDCP
12-09-16	1	5	THE EAGLES	ERIC RUSSCHER	369	369	3	123	369	102
12-09-16	1	5	THE EAGLES	LINDA RUSSCHER	492	492	3	164	492	69
12-09-16	1	5	THE EAGLES	BILL MOORE	    582	582	3	194	582	45
12-09-16	1	5	THE EAGLES	DONNA HEDLEY	581	581	3	194	581	45
19-09-16	2	5	THE EAGLES	ERIC RUSSCHER	417	786	6	131	417	95
19-09-16	2	5	THE EAGLES	LINDA RUSSCHER	501	993	6	166	501	68


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

Вот код, который я пытаюсь добавить "максимальный балл" для каждого котелка, как я сделал в приведенном ниже примере. Оба работают по отдельности, но не вместе.

( SELECT "Date","Wk","Tm","Team","Bowler","WEEK'S TOTAL","GRAND TTL", 
 "GMS", "AVG","HSS","HGS GM1","HGS GM2","HGS GM3", "MaxGm","HDCP") 
UNION 
( SELECT Date,Week,TeamNum,Team,Bowler, 
 /* TTL */ 
 FORMAT ((Gm1+Gm2+Gm3),0) as “TOTAL” , 
 /* GRAND */ 
 FORMAT ((SELECT SUM(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date),0), 
 /* GAME COUNT */ 
 FORMAT ((SELECT COUNT(Gm1)*3 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date),0), 
 /* RUNNING AVG */ 
 FORMAT ((SELECT SUM(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date) 
         / (SELECT COUNT(Gm1)*3 FROM b_Scores L 
            WHERE L.Bowler = R.Bowler AND L.Date <= R.Date),0) as "RAvg" , 
 /* HIGH GM SINGLE - FUTURE */ /* Max value for 3 Game Scratch */ 
 FORMAT ((SELECT MAX(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler 
          AND L.Date <= R.Date),0) as "Max Scratch", 

/* MAX GAME TO DATE 



 /* ADDING RUNNING HANDICAP. (250-RAVG) *0.8 */ 
 FORMAT (((250 -( SELECT SUM(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date) / ( SELECT COUNT(Gm1)*3 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date ))*0.8),0) 
 FROM b_Scores R 
 JOIN b_Matches ON Week = MatchWk AND TeamNum = MatchTm 
)


SELECT MAX(Score)
FROM  
( SELECT            
         CASE WHEN Gm1 >= Gm2
               AND Gm1 >= Gm3 THEN Gm1
               WHEN Gm2 >= Gm1
               AND Gm2 >= Gm3 THEN Gm2
               WHEN Gm3 >= Gm1
               AND Gm3 >= Gm2 THEN Gm3
               ELSE Gm1
          END AS Score          
 FROM b_Scores	
 WHERE TeamNum =4
) AS score_query ;


Как и было запрошено: точный код вместе с ошибкой.
Протестировано в базе данных Mysql (pre2012)
( SELECT "Date","Wk","Tm","Team","Bowler","WEEK'S TOTAL","GRAND TTL", 
 "GMS", "AVG","HSS", "MaxGm","HDCP") 
UNION 
( SELECT Date,Week,TeamNum,Team,Bowler, 
 /* TTL */ 
 FORMAT ((Gm1+Gm2+Gm3),0) as “TOTAL” , 
 /* GRAND */ 
 FORMAT ((SELECT SUM(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date),0), 
 /* GAME COUNT */ 
 FORMAT ((SELECT COUNT(Gm1)*3 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date),0), 
 /* RUNNING AVG */ 
 FORMAT ((SELECT SUM(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date) 
         / (SELECT COUNT(Gm1)*3 FROM b_Scores L 
            WHERE L.Bowler = R.Bowler AND L.Date <= R.Date),0) as "RAvg" , 

 /* HIGH GM SINGLE - FUTURE */ /* Max value for 3 Game Scratch */ 
 FORMAT ((SELECT MAX(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler 
          AND L.Date <= R.Date),0) as "Max Scratch", 

/* MAX GAME TO DATE per player  */

/* (Line #26) */
SELECT MAX(Score)
FROM  
( SELECT            
         CASE WHEN Gm1 >= Gm2
               AND Gm1 >= Gm3 THEN Gm1
               WHEN Gm2 >= Gm1
               AND Gm2 >= Gm3 THEN Gm2
               WHEN Gm3 >= Gm1
               AND Gm3 >= Gm2 THEN Gm3
               ELSE Gm1
          END AS Score          
 FROM b_Scores	
 ORDER by TeamNum, Bowler
 
) AS score_query ;


 /* ADDING RUNNING HANDICAP. (250-RAVG) *0.8 */ 
 FORMAT (((250 -( SELECT SUM(Gm1+Gm2+Gm3) 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date) / ( SELECT COUNT(Gm1)*3 
          FROM b_Scores L WHERE L.Bowler = R.Bowler AND L.Date <= R.Date ))*0.8),0) 
 
 FROM b_Scores R 
 JOIN b_Matches ON Week = MatchWk AND TeamNum = MatchTm 
)


Ошибка Msg:
 MySQL said: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MAX(Score)
FROM  
( SELECT            
         CASE WHEN Gm1 >= Gm2
' at line 26 

CHill60

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

Member 12995602

Спасибо. Добавили некоторые данные и код.

Richard MacCutchan

Вы все еще не объяснили, как вы собрали код вместе или какие ошибки вы видите. Пожалуйста, опубликуйте точный код, который не работает, и точное сообщение об ошибке(сообщениях).

Member 12995602

добавили к вопросу. Если вы хотите что-нибудь увидеть, пожалуйста, дайте мне знать.

Richard MacCutchan

Я не эксперт в MySQL, но вы уверены, что запятая в конце предыдущего утверждения правильна?

          AND L.Date <= R.Date),0) as "Max Scratch", 

/* MAX GAME TO DATE per player  */

/* (Line #26) */
SELECT MAX(Score)

Member 12995602

Попробовал удалить этот 1-й, а затем попытался изменить его на ";"
Получите ту же ошибку msg.

Я также пытался поставить скобки вокруг нового кода, но безуспешно

Думаю, что это близко, но я довольно новичок в этом типе кода

Richard MacCutchan

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

0 Ответов