如果我们从以下简单的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?任何描述变化都足够,因为它们几乎完全相同。
编辑:描述是一个文本字段。
答案 0 :(得分:4)
如果无法以(max)类型升级到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 :(得分:0)
你试过吗
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
答案 2 :(得分:0)
没有机会测试这个,但它应该很接近。如果您使用的是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