Как вставить оператор рабочего случая в другой код?
У меня есть это рабочее заявление 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
Нет смысла просто беспорядочно менять вещи. Пойдите и изучите документацию, чтобы проверить правильный синтаксис команд.