Неверное выражение в списке выбора (не содержится ни в статистической функции, ни в предложении GROUP BY) - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть этот запрос, но когда я запускаю код, я получаю сообщение об ошибке.

Недопустимое выражение в списке выбора (не содержится ни в статистической функции, ни в предложении GROUP BY)

Кто-нибудь может мне помочь?

Запрос следующий:

SELECT
  obv.POS, 
  obv.CODVIDRO, 
  obv.PRENATW,
  obv.FASE, 
  obv.LARGURA,
  obv.ALTURA, 
  obv.QTDE,
  obv.OBS, 
  obv.AREAEMP, 
  obv.PESO,
  obv.CUSTO, 
  obv.CUSTOIPI, 
  obv.CODMATRIZ,
  IIF( obv.CODMATRIZ > '', obv.CODMATRIZ, obv.CODVIDRO ) as CodVidro2,                                                    
  vid.REF, 
  vid.DESCRICAO, 
  vid.PRENATV, 
  vid.ESPESSURA,
  obi.Subdiv, 
  obi.CodEsqd, 
  obi.Tipo, 
  obi.Obs, 
  obi.CodOracle, 
  obi.Localiz,
  IIF( pnw.Descricao > '', pnw.Descricao, obv.PRENATW ) as pnwDescricao,
  SUM(((OBV.LARGURA/1000)*(OBV.ALTURA/1000)*OBV.QTDE)) AS AREA,
  IIF(obv.CODVIDRO = 'V-ARAM-05',(SUM((((OBV.LARGURA/1000)*(OBV.ALTURA/1000)*OBV.QTDE))/3.57)), IIF(obv.CODVIDRO = 'V-MINB-04',(SUM((((OBV.LARGURA/1000)*(OBV.ALTURA/1000)*OBV.QTDE))/3.57)), (SUM((((OBV.LARGURA/1000)*(OBV.ALTURA/1000)*OBV.QTDE))/7.062)))) AS QTDECHAPAUNIT
FROM ObCalcV AS obv
LEFT JOIN Vidros vid ON (obv.CodVidro=vid.CodVidro)
LEFT JOIN ObItens obi ON (obv.ID_Obra=obi.ID_Obra AND obv.ItemObra=obi.ItemObra)
LEFT JOIN PreNat_W pnw ON (obv.PRENATW=pnw.PRENATW)
WHERE (obv.ID_OBRA = :ID_OBRA)
GROUP by obv.POS, 
  obv.CODVIDRO, 
  obv.PRENATW,
  obv.FASE, 
  obv.LARGURA,
  obv.ALTURA, 
  obv.QTDE,
  obv.OBS, 
  obv.AREAEMP, 
  obv.PESO,
  obv.CUSTO, 
  obv.CUSTOIPI, 
  obv.CODMATRIZ,                                                        
  vid.REF, 
  vid.DESCRICAO, 
  vid.PRENATV, 
  vid.ESPESSURA,
  obi.Subdiv, 
  obi.CodEsqd, 
  obi.Tipo, 
  obi.Obs, 
  obi.CodOracle, 
  obi.Localiz
ORDER BY CodVidro2, obv.PRENATW, obi.Tipo 

Полная ошибка:

может 'Сообщение в формате t 13: 896 - файл сообщения C: \ Windows \ firebird.msg не найден.Ошибка динамического SQL.Код ошибки SQL = -104.Неверное выражение в списке выбора (не содержится ни в статистической функции, ни в предложении GROUP BY).

1 Ответ

0 голосов
/ 17 декабря 2018

Это довольно легко обнаружить.В конце концов, вы программист.

https://docs.google.com/spreadsheets/d/1tBfebBKRIumJ0I3BaN2gNwGIMivc1wDJ-AVeohH0DCc/edit?usp=sharing

  1. Вы запускаете электронную таблицу.Microsoft Excel, OpenOffice, Gnumeric, MyOffice, Google Spreasheet - просто любые.Вам нужны очень простые функции.

  2. Вы копируете имена столбцов select DB в один столбец электронной таблицы, а имена столбцов group by - в другую строку.

2.1.Там выше они оказались одной ячейкой после копирования их из переполнения стека в OpenOffice, поэтому мне пришлось использовать функцию «Разделить данные по столбцам», и поэтому для меня они заканчивались строками, а не столбцами.Менее удобно читать, но не сильно меняется.

2.2.Обратите внимание, вам не нужны формулы столбцов, все эти выражения, вам нужны имена столбцов.

2.3.Эта методика очень очевидна и очень проста, для запросов типа Select aaa, x.aaa, tablename.aaa from tablename as x она будет видеть три разных столбца.Что ж, это поможет вам сделать так, чтобы все ваши столбцы ссылались равномерно в вашем запросе.

затем вы сортируете оба столбца электронной таблицы (или в моем случае я сортировал строки) по алфавиту.

теперь вы вставляете простую формулу в столбец между этими столбцами,как {B1} =A1=C1 и скопируйте его по всему столбцу (или строке).

Теперь просто спуститесь вниз по этому столбцу и проверьте, где «True» было изменено на «False».

Несколько операций вырезания-перемещения-вставки и восстановления этой формулы - и вы обнаружите все несинхронизированные столбцы.

В вашем случае - иВы можете проверить это по ссылке - первый несинхронизированный столбец был CodVidro2 - однако он был пропущен из Group By, так что это не имело значения.Таким образом, вы перемещаете «Захват по столбцам» дальше на одну ячейку, чтобы восстановить синхронизацию, и идете вниз по линии, определяя следующее место, ИСТИНА становится ЛОЖНОЙ.

Это будет obv.POS столбец БД, который, по-видимому, отсутствует.

Позже появятся еще два несинхронизированных столбца, но снова они будутне быть частью Group by, поэтому, скорее всего, не будет иметь значения.

Missed column detected by synchronicity gap

Обратите внимание, что этот метод очень прост и ультра прост, он не будет выделять столбцы , упомянутые внутри выражений (включая функцию агрегирования), но не перечислены явно в списке select - если вы не извлечете ихиз этих выражений.Однако для тех менее простых случаев вы можете сделать это вручную.И в 90% случаев электронная таблица - любая электронная таблица - с готовностью сделает для вас сравнение.
...