2010-01-04 106 views
1

如果我們從以下簡單的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?任何描述變化都可以滿足,因爲它們幾乎完全相同。

編輯:描述是一個文本字段。

回答

4

如果您不能升級到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

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

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

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