Member 12995602 Ответов: 2

Как мне изменить свой SQL код, чтобы дать результат для команды из 4 человек из настоящего 1 игрока


Привет
Я использовал приведенный ниже код, чтобы дать правильный ответ для одного игрока команды по боулингу.
Это работает для одного игрока, но нужно суммировать этот ответ для каждого игрока.

Попробовал изменить группировку с котелка на командную переменную, но по-прежнему дает результат только для первого игрока "гандикап", где он должен быть суммой результата для всех 4 игроков.

=====================
Вот пример входных данных

НП группа дата шк котелок ГМ-1 гм-2 гм-3 с HDCP
1 Team1 2017-02-13 21 GREG 158 183 201 84
1 Team1 2017-02-13 21 LAURIE 176 117 118 106
1 Team1 2017-02-13 21 Линда 205 129 153 69
1 Team1 2017-02-13 21 Рик 213 214 181 46


Формула HDCP на самом деле 250-(Running Average * 0.8), которая работает с приведенной выше формулой, которая, вероятно, длиннее, чем должна, потому что я не мог заставить переменные работать.
Репортаж об одном игроке, как и выше, работал, чтобы дать HDCP 84, 118,153 и т. д.
Попытка получить результат в виде команды, которая выглядела бы так
Week   TeamNum	Date	   Team	     Avg	  HDCP	 Game1	Game2	Game3
21	   1	  2017-02-13	Team1	  683	  305	  752	  643	  653

HDCP для команды будет 305, (сумма 84, 106, 69, 46)
Попытался поместить части формул в переменные с помощью declare для упрощения кода, но ничего не вышло. Это отдельная тема, но она поможет упростить кодирование.

Надеюсь, это поможет понять проблему.
Спасибо

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

Формат (((250 - (выберите сумму (Gm1+Gm2+Gm3)
Из Rainbow_Lanes L
Где L. Bowler = R. Bowler
И L. Date <= R. Date)
/
(Выберите количество (Gm1)*3
Из Rainbow_Lanes L
Где L. Bowler = R. Bowler
И L. Date <= R. Date )) *0.8), 0),

Maciej Los

Вы должны предоставить входные данные и ожидаемые выходные данные.
На данный момент мы ничего не знаем о структуре таблицы (таблиц)и т. д.

2 Ответов

Рейтинг:
0

Bryian Tan

Вы можете использовать общее табличное выражение + группировку. Вот пример

DECLARE  @Bowl TABLE (
	[Tm] [int] NULL,
	[Team] [nvarchar](50) NULL,
	[Date] [date] NULL,
	[Wk] [int] NULL,
	[Bowler] [nvarchar](50) NULL,
	[Gm1] [int] NULL,
	[Gm2] [int] NULL,
	[Gm3] [int] NULL,
	[HDCP] [int] NULL
)

INSERT @Bowl ([Tm], [Team], [Date], [Wk], [Bowler], [Gm1], [Gm2], [Gm3], [HDCP]) VALUES (1, N'Team1', CAST(N'2017-02-13' AS Date), 21, N'Greg', 158, 183, 201, 84)
INSERT @Bowl ([Tm], [Team], [Date], [Wk], [Bowler], [Gm1], [Gm2], [Gm3], [HDCP]) VALUES (1, N'Team1', CAST(N'2017-02-13' AS Date), 21, N'Laurie', 176, 117, 118, 106)
INSERT @Bowl ([Tm], [Team], [Date], [Wk], [Bowler], [Gm1], [Gm2], [Gm3], [HDCP]) VALUES (1, N'Team1', CAST(N'2017-02-13' AS Date), 21, N'Linda', 205, 129, 153, 69)
INSERT @Bowl ([Tm], [Team], [Date], [Wk], [Bowler], [Gm1], [Gm2], [Gm3], [HDCP]) VALUES (1, N'Team1', CAST(N'2017-02-13' AS Date), 21, N'Rick', 213, 214, 181, 46)
INSERT @Bowl ([Tm], [Team], [Date], [Wk], [Bowler], [Gm1], [Gm2], [Gm3], [HDCP]) VALUES (2, N'Team2', CAST(N'2017-02-13' AS Date), 21, N'Boo', 111, 222, 333, 56)
INSERT @Bowl ([Tm], [Team], [Date], [Wk], [Bowler], [Gm1], [Gm2], [Gm3], [HDCP]) VALUES (2, N'Team2', CAST(N'2017-02-13' AS Date), 21, N'Moo', 222, 145, 158, 22)

;WITH temp as (
SELECT Tm TeamNum, Team, [date], Wk [Week],
SUM(Gm1) Game1	, SUM(Gm2) Game2, SUM(Gm3) Game3, SUM(HDCP) HDCP 
 FROM @Bowl

GROUP BY Tm, Team, [date], Wk
)
SELECT *, cast(round(((Game1+Game2+Game3)/3.0),2) as numeric(36,0)) Avg FROM temp

GO


Member 12995602

Я пробовал тестировать код и получил эту ошибку?
"#1064 - у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с таблицей DECLARE @Bowl
(
[Tm] [int] NULL,
[Команда] [nvarchar] (50) NULL,
[Дата' в строке 1"?
Затем попытался удалить таблицу @bowl и связать ее с моими данными таблицы и получить эту ошибку с 1-й строкой строки " с temp as ..."?

С темпом как
(
ВЫБИРАТЬ
TeamNum,
Команда,
Дата,
Неделя,
Сумма (Gm1) Игра1,
Сумма (Gm2) Game2,
Сумма (Gm3) Game3,
СУММА (HDCP) HDCP

Из Rainbow_Lanes_Matches
Присоединяйтесь к Rainbow_Lanes
ON MatchDate = дата


Группа по ТМ, команда, дата, " неделя`
)
SELECT *, cast(round (((Game1+Game2+Game3) / 3.0), 2) as numeric(36,0)) СР от температуры

Извините за то, что я новичок .
Конечно, это должно быть просто.

С моими данными я получаю ошибку, связанную со строкой" with temp as...".
Мой код, который я пытался использовать с моими данными, таков
"С темпом как
(
ВЫБИРАТЬ
TeamNum,
Команда,
Дата,
Неделя,
Сумма (Gm1) Игра1,
Сумма (Gm2) Game2,
Сумма (Gm3) Game3,
СУММА (HDCP) HDCP

Из Rainbow_Lanes_Matches
Присоединяйтесь к Rainbow_Lanes
ON MatchDate = дата


Группа по ТМ, команда, дата, " неделя`
)
SELECT *, cast(round (((Game1+Game2+Game3) / 3.0), 2) as numeric(36,0)) СР от температуры
"

Bryian Tan

Извиняюсь. Я думал вы используете MS SQL

Рейтинг:
0

Bryian Tan

Вот версия MySQL.

Предполагая, что это те данные, которые у вас есть в таблице

TeamNum	Team	Date	    Week Bowler	Game1 Game2	Game3	HDCP
    1	Team1	2/13/2017   21   Greg	158   183	201     84
    1	Team1	2/13/2017   21   Laurie	176   117	118     106
    1	Team1	2/13/2017   21   Linda	205   129	153     69
    1	Team1	2/13/2017   21	 Rick	213   214	181     46
    2	Team2	2/13/2017   21	 Boo	123   214	222     77
    2	Team2	2/13/2017   21	 Moo	211   321	123     44


Вы можете просто использовать встроенный вид select для получения результатов
SELECT *, ROUND((Game1+Game2+Game3)/3) 'Avg' FROM (
SELECT TeamNum, Team, Date, Week, SUM(Game1) 'Game1',
SUM(Game2) 'Game2',SUM(Game3) 'Game3',SUM(HDCP) 'HDCP'
FROM bowl.test
GROUP BY TeamNum, Team, Date, Week) bowltemp;


Выход:
TeamNum	Team	Date	   Week	Game1	Game2	Game3	HDCP	Avg
1       Team1   2/13/2017  21	752     643     653     305     683
2       Team2   2/13/2017  21	334     535     345     121     405


Member 12995602

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

#1142-выберите команду отказано пользователю 'cpses_diaG3Tmasx' @ 'localhost' для таблицы 'test'

Я должен был использовать команду заявить?

Это то, что я пытался....
SELECT *, ROUND ((Gm1+Gm2+Gm3)/3) 'Avg'
ОТ
(
Выберите TeamNum, Team, Date, Week,
SUM (Gm1) 'Game1',
SUM (Gm2) 'Game2',
SUM (Gm3) 'Game3',
SUM (HDCP) 'HDCP'
Из чаши.
Группа по TeamNum, команде, дате, неделе
)
боултемп

...........................
Как я должен указывать или объявлять временную таблицу?
Может быть, это моя проблема, потому что моя ошибка-это ошибка разрешения, где у меня есть все разрешения?
У меня есть HDCP как длинная формула.
Как бы вы предложили поместить результат в переменную, которая может быть вызвана позже?
Очень сожалею, что не понял вашего описания. Это выглядело так просто, но не могло заставить его работать.

Bryian Tan

есть ли у вас в базе данных schema.table [bowl.test]???? Не пытайтесь запустить его, если не можете. Попробуйте понять запрос и применить его к вашей таблице (Rainbow_Lanes).