Для 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 и раздел над колонной вы хотели бы группе я использую Common Table Expression, чтобы сделать это:
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
. Тогда у вас могут быть три строки, которые выглядят дублирующими в этих столбцах, однако 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
Когда вы используете агрегат, вам нужно выбрать только столбец в агрегационных или агрегатных функциях, таких как _count_ или _avg_. Если вы хотите отображать другие поля, они должны выполнить одно из предыдущих утверждений. –