这是我的表创建代码
CREATE TABLE "transactions" (
"id" INT NOT NULL,
"tno" INT NOT NULL,
"pno" INT NOT NULL,
"sno" INT NOT NULL,
"accode" INT NOT NULL,
"acname" VARCHAR(50) NOT NULL,
"date" DATE NOT NULL,
"truck" VARCHAR(50) NULL,
"weight" DECIMAL NULL,
"quality" INT NULL,
"debit" MONEY NOT NULL,
"credit" MONEY NOT NULL,
"amount" MONEY NOT NULL,
"comment" TEXT NULL,
PRIMARY KEY ("id")
);
我希望通过此查询从此表中获取一些数据。
Select * from transactions GROUP BY tno
但它给了我错误:
Msg 8120, Level 16, State 1, Line 1
Column 'transactions.tno' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
最后,我得到了解决方案。我的回答是
select yt.id, yt.tno, yt.accode, yt.acname, yt.pno, yt.comment, yt.amount, yt.date from transactions yt inner join( select tno, max(id) id from transactions ss group by tno ) ss on yt.id = ss.id and yt.tno = ss.tno order by yt.tno desc
答案 0 :(得分:1)
GROUP BY允许您收集有关数学运算的数据,并在非数学运算下收集它们。
例如
SELECT truck, SUM(tno)
FROM transactions
GROUP BY truck
为您提供表格中每种类型“卡车”的TNO字段总值。这里的数学运算符是SUM。
所以如果你的表包含这个:
truck tno
------------
dodge 44
viper 33
dodge 22
以上查询将返回
truck tno
------------
dodge 66
viper 33
您在没有数学运算符的情况下使用GROUP BY,因此查询失败。要使用数据
Select * from transactions
或者,如果您确实想使用数学运算符来获取某些数据,请更清楚地告诉我们您要实现的目标,而不仅仅是发布表结构和失败的查询。