Это основанное на множестве решение проблемы. Производительность, вероятно, будет отстойной, но она работает:)
CREATE TABLE #LogEntries (
ID INT IDENTITY,
LogEntry VARCHAR(100)
)
INSERT INTO #LogEntries VALUES ('beans')
INSERT INTO #LogEntries VALUES ('beans')
INSERT INTO #LogEntries VALUES ('beans')
INSERT INTO #LogEntries VALUES ('cabbage')
INSERT INTO #LogEntries VALUES ('cabbage')
INSERT INTO #LogEntries VALUES ('carrots')
INSERT INTO #LogEntries VALUES ('beans')
INSERT INTO #LogEntries VALUES ('beans')
INSERT INTO #LogEntries VALUES ('carrots')
SELECT logentry, COUNT(*) FROM (
SELECT logentry,
ISNULL((SELECT MAX(id) FROM #logentries l2 WHERE l1.logentry<>l2.logentry AND l2.id < l1.id), 0) AS id
FROM #LogEntries l1
) AS a
GROUP BY logentry, id
DROP TABLE #logentries
Результаты:
beans 3
cabbage 2
carrots 1
beans 2
carrots 1
ISNULL () требуется для первого набора bean-компонентов.