我有这个查询,但是当我运行代码时,我得到了错误消息。
选择列表中的表达式无效(既不在聚合函数中也不在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
完整错误如下:
无法格式化消息13:896-找不到消息文件C:\ Windows \ firebird.msg。 动态SQL错误。 SQL错误代码= -104。 选择列表中的表达式无效(聚合函数或GROUP BY子句均未包含)。
答案 0 :(得分:0)
这很容易检测。你毕竟是程序员。
https://docs.google.com/spreadsheets/d/1tBfebBKRIumJ0I3BaN2gNwGIMivc1wDJ-AVeohH0DCc/edit?usp=sharing
您启动电子表格。 Microsoft Excel,OpenOffice,Gnumeric,MyOffice,Google Spreasheet-随便什么。您需要非常基本的功能。
您将select
数据库列名称复制到一个电子表格列中,并将group by
列名称复制到另一行中。
2.1。在将它们从Stack Overflow复制到OpenOffice之后,它们上方变成了一个单元格,因此我不得不使用“按列拆分数据”功能,因此对我来说它们以行而不是列结尾。阅读起来不太舒服,但变化不大。
2.2。注意,您不需要列公式,所有这些表达式都需要列名称。
2.3。这种方法非常明显且非常简单,对于Select aaa, x.aaa, tablename.aaa from tablename as x
之类的查询,它将看到三个不同的列。好吧,这将帮助您在查询中统一引用所有列。
然后您可以按字母分别对电子表格的两列(或者在我的情况下我对行进行排序)。
现在您将在这些列之间的列中插入简单公式,例如{B1} =A1=C1
,然后将其复制到整个列(或行)中。
现在,您只需在该列中查找“ True”更改为“ False”的位置即可。
几乎没有该公式的剪切移动粘贴操作和恢复-您会发现所有不同步的列。
对于您而言-您可以通过链接进行检查-不同步的第一列是CodVidro2
-但是Group By
中缺少了第一列,所以没关系。因此,您将“按列增长”再移一个单元格即可恢复同步,并在发现下一个位置的行上向下TRUE变为FALSE。
那可能是您似乎丢失的obv.POS
数据库列。
稍后将再有两列不同步,但是它们又不会成为Group by
的一部分,因此很可能无关紧要。
select
列表中明确列出-除非您将从这些表达式中提取它们。但是,对于那些不太简单的情况,您可以手动提取。在90%的情况下,电子表格-任何电子表格-都可以轻松地为您进行比较。