聚合函数和按问题分组

问题描述:

如果我们从以下简单的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) 
+1

难道你还不得不使用MIN或MAX,否则你会得到虚假群体? – recursive 2010-01-04 20:44:46

+0

哎呀!现在修复它 – gbn 2010-01-04 20:51:26

你试过

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 
+0

我试过最多,和刚才试过民,并收到以下错误: 错误\t SQL Server数据库错误:文本,ntext和图像数据类型在此子查询或聚合表达式中无效。 – DavidStein 2010-01-04 19:19:00

+0

** sor.fdesc **的类型是什么? – 2010-01-04 19:20:08

+0

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 
+0

内心是一个保留字,我相信。 – DavidStein 2010-01-04 20:22:29