Агрегировать функцию SQL, чтобы получить только одну из каждой группировки - PullRequest
2 голосов
/ 14 июля 2010

У меня есть таблица, которую нужно нормализовать со многими полями В SQL-Server 2000 . Он содержит 2 поля, которые я использую, чтобы придумать отличную комбинацию, как определено спецификациями. ID и скорость: есть несколько строк с одинаковыми идентификаторами и тарифами

Сначала я создал временную таблицу, сгруппировав комбинацию идентификаторов и тарифов.

SELECT ID, Count(*) AS IDCounts, SUM(RATE) As Total 
INTO #Temp
GROUP BY ID

Теперь я использую Distinct, чтобы найти только уникальные комбинации. Таким образом, у меня будет несколько групп идентификаторов, совместно использующих тот же Total и IDCounts

SELECT DISTINCT Total, IDCounts
INTO #uniques
FROM #Temp

Теперь мой вопрос: как объединить один идентификатор обратно в эту отдельную группу IDCounts и Total и поместить его в новую таблицу? Неважно, какой из идентификаторов в группах, если я использую один из той же группы.

Ответы [ 3 ]

2 голосов
/ 14 июля 2010

Добавьте "Min (ID) AS FirstID" к выделению в # unique.

2 голосов
/ 14 июля 2010

Сохранение ваших временных таблиц (хотя все это можно сделать одним запросом):

SELECT ID, Count(*) AS IDCounts, SUM(RATE) As Total 
INTO #Temp
GROUP BY ID

SELECT Total, IDCounts, MIN(ID) AS SomeID
INTO #uniques
FROM #Temp
GROUP BY Total, IDCounts
0 голосов
/ 14 июля 2010

Попробуйте что-то вроде этого:

SELECT MAX(ID) AS Id, Count(*) AS IDCounts, SUM(RATE) As Total 
FROM SOMETABLE
GROUP BY IDCounts, Total
...