2016-09-27 106 views
2

我目前想SELECTDISTINCT FirstNamesGROUP,使用Microsoft Access 2010
我的表的簡化相關列如下:MS-SQL訪問DISTINCT GROUP BY

+----+-------------+-----------+ 
| ID | GroupNumber | FirstName | 
+----+-------------+-----------+ 
| 1 |   1 | Peter  | 
| 2 |   1 | Bob  | 
| 3 |   1 | Peter  | 
| 4 |   2 | Rosemary | 
| 5 |   2 | Jamie  | 
| 6 |   3 | Peter  | 
+----+-------------+-----------+ 

我實際的表包含我想要應用此過程(單獨)的兩列,但我應該可以簡單地重複另一列的過程。列組編號是一個簡化,我的表實際上將所有行在10天的時間間隔在一起,但我已經解決了這個問題。

而且我想它返回此:

+-------------+------------+ 
| GroupNumber | FirstNames | 
+-------------+------------+ 
|   1 | Peter  | 
|   1 | Bob  | 
|   2 | Rosemary | 
|   2 | Jamie  | 
|   3 | Peter  | 
+-------------+------------+ 

這意味着,我要爲每個組所有不同FirstNames。
常規DISTINCT會忽略組邊界,只提到Peter一次。所有集合函數都會將我的輸出減少爲只有一個值,或根本不適用於字符串。訪問也不支持SELECT不是聚合的列或GROUP BY語句。

我發現的所有其他答案要麼是聚合,不適用於MS Access,要麼通過以不適用於我的情況的方式解決數據問題來解決。 (標準化的語言是一個很好的事情,不是嗎?)

我現在的(無效)查詢看起來是這樣的:

SELECT GroupNumber, 
    DISTINCT FirstNames -- This is illegal, distinct applies to all 
         -- columns and doesn't respect groups. 
FROM Example AS b 
-- Complicated stuff to make the groups 
GROUP BY GroupNumber; 

這個查詢是一次性的事情,並用於分析58000行excel從另一個數據庫導出的電子表格(不是我的錯),因此無需爲運行時進行優化。

我想完全通過SQL,如果可能的話不使用VBA。

+0

只要使用'SELECT DISTINCT GroupNumber,FirstNames' – Lamak

+0

但是,這將返回groupNumber:1,2, 3和FirstNames:Peter,Bob,Rosemary,Jamie,Peter –

+0

不,不會。你試過了嗎? – Lamak

回答

2

這應該工作:

SELECT DISTINCT GroupNumber, FirstNames 
FROM Example AS b 
1

此問題的一個解決方案是通過在同一時間列GroupNumber和名字是組。該查詢介紹如下:

Select GroupNumber, FirstName 
From input 
Group By GroupNumber, FirstName 

(?標準化的語言是一個很好的事情,是不是)