聚合函数和按问题分组
如果我们从以下简单的SQL语句开始工作。聚合函数和按问题分组
SELECT sor.FPARTNO, sum(sor.FUNETPRICE)
FROM sorels sor
GROUP BY sor.FPARTNO
FPartNo是部件号,Funetprice显然是净价格。用户也想要描述并导致问题。如果我遵循了这样的:
SELECT sor.FPARTNO, sor.fdesc, sum(sor.FUNETPRICE)
FROM sorels sor
GROUP BY sor.FPARTNO, sor.fdesc
如果没有针对这部分中描述的多种变体,在文本通常是非常小的变化,那么我实际上并不总量上的零件号。合理?
我相信这一定很简单。我怎样才能返回与零件编号相对应的第一个fdesc?任何描述变化都可以满足,因为它们几乎完全相同。
编辑:描述是一个文本字段。
如果您不能升级到SQL Server 2005的(最大)型:-)
试试这个。 SUBSTRING适用于blob,但返回文本的varchar。所以总要工作,你失去了一些数据
SELECT
sor.FPARTNO, MIN(SUBSTRING(sor.fdesc, 1, 8000)), sum(sor.FUNETPRICE)
FROM
sorels sor
GROUP BY
sor.FPARTNO, SUBSTRING(sor.fdesc, 1, 8000)
你试过
SELECT sor.FPARTNO, MIN(sor.fdesc), sum(sor.FUNETPRICE)
FROM sorels sor
GROUP BY sor.FPARTNO
甚至MAX可以做。
尽量铸造NTEXT领域
DECLARE @sorels TABLE(
FPARTNO INT,
fdesc NTEXT,
FUNETPRICE FLOAT
)
SELECT sor.FPARTNO, MIN(CAST(sor.fdesc AS VARCHAR(4000))), sum(sor.FUNETPRICE)
FROM @sorels sor
GROUP BY sor.FPARTNO
我试过最多,和刚才试过民,并收到以下错误: 错误\t SQL Server数据库错误:文本,ntext和图像数据类型在此子查询或聚合表达式中无效。 – DavidStein 2010-01-04 19:19:00
** sor.fdesc **的类型是什么? – 2010-01-04 19:20:08
sor.fdesc是一个文本字段,正如我在前面的编辑中所述。 :) – DavidStein 2010-01-04 19:21:30
还没有机会测试这一点,但它应该是接近。如果你使用的是SQL Server 2005,那么CTE就会更加清晰。
SELECT agg.FPARTNO,
(SELECT TOP 1 inner.FDESC FROM sorels inner WHERE inner.FPARTNO = agg.FPARTNO) FDESC,
agg.FUNETPRICESUM
FROM (SELECT sor.FPARTNO,
sum(sor.FUNETPRICE) FUNETPRICESUM
FROM sorels sor
GROUP BY sor.FPARTNO) agg
内心是一个保留字,我相信。 – DavidStein 2010-01-04 20:22:29
难道你还不得不使用MIN或MAX,否则你会得到虚假群体? – recursive 2010-01-04 20:44:46
哎呀!现在修复它 – gbn 2010-01-04 20:51:26