表 Csv 有很多列,包括 FirstName、Lastname、ProjectName、BuildingNumber 等。我想找到所有記錄都具有相同的 FirstName-LastName 組合。
但是下面的代碼給了我錯誤Column Csv.ProjectName is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
SELECT *
FROM Csv
GROUP BY FIrstName, Lastname
HAVING COUNT(*) > 1
如何調整代碼以修復錯誤?
uj5u.com熱心網友回復:
錯誤資訊是正確的。您可以在選擇串列中指定 FirstName、LastName。所有其他列都必須是聚合。例如,如果地址是表中的一列,那么 MAX(Address) 就可以了。(如果有兩個以上的記錄,您將不知道 MAX 值來自哪個記錄。使用 MAX 或 MIN 可能會導致記錄的列值來自不同的記錄。所以您不能只選擇每列的 MAX除非邏輯使得結果不需要是來自一個特定記錄的值。)
一種方法是獲取您想要的“密鑰”,然后加入以獲取整個記錄。(視窗函式是另一種方法。)
SELECT k.NameCount, c.*
FROM Csv c
INNER JOIN (
SELECT FirstName, Lastname, COUNT(*) as [NameCount]
FROM Csv
GROUP BY FirstName, Lastname
HAVING COUNT(*) > 1
) k
ON k.FirstName = c.FirstName AND k.Lastname = c.Lastname
ORDER BY k.NameCount DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/474607.html
