對Transact SQL,因爲你的標籤標識,你必須分組時使用所有選定列以某種方式。
爲此,您必須使用函數中的列(COUNT
,MAX
,AVG
等),或者您必須按它們進行分組。
分組仍將給你列,不過:
SELECT UserID,
Department,
JobCode,
Template,
COUNT(Template)
FROM myTable
GROUP BY UserID, Department, JobCode, Template
這會給你你所選擇的列,並給模板的基於分組的數量。因此,對於UserID
,Department
,JobCode
和Template
的每個不同組,它會給你一個計數。
如果您不關心通過模板進行區分,請將其從選擇列表中刪除,但將其保留在COUNT
函數中。
相反,您可以通過我使用的是公用表表達式做到這一點使用ROWNUMBER和分區在列,你想組:
WITH CTE AS
( SELECT UserID,
Department,
JobCode,
Template,
RowNum = ROW_NUMBER() OVER(PARTITION BY Template)
FROM myTable
)
SELECT UserID, Department, JobCode, Template
FROM CTE
WHERE RowNum > 0;
的ROWNUM列會給你數的枚舉模板出現在其他列的時間。例如,您可能有UserID = 5
,Department = 5
,JobCode = 5
。然後你可能會有3行在這些列上顯示爲重複,但是Template
將有所不同。在本例中,它將等於Template = 32
,Template = 4
和Template = 101
。該RowNum
列將由1的每一行增加,所以你將有一個總的3見下文:
--------------------------------------------------
| UserID | Department | JobCode | Template | RowNum
| 5 | 5 | 5 | 32 | 1
| 5 | 5 | 5 | 4 | 2
| 5 | 5 | 5 | 101 | 3
你可以發佈你的數據樣本,爲什麼你想要的結果是? – stuartd 2015-02-17 21:04:48
當您使用聚合時,您只需要選擇聚合或聚合函數(如_count_或_avg_)中的列。如果你想顯示其他的字段,他們需要完成之前的一個陳述。 – 2015-02-17 21:07:57