2013-09-21 148 views
1

MS-Access查詢:按姓名和年齡組,並獲得無重複的數據(姓名和年齡)的詳細 請找到下面詳細查詢不重複提取記錄

表模式:

id: integer 
name: varchar(100) 
age: integer 
city: varchar(100) 

記錄表:

------------------------------------ 
id| name | age | city 
------------------------------------ 
1 | ram  | 25 | bhopal 
2 | brajesh | 30 | indore 
3 | ram  | 25 | indore 
4 | ram  | 26 | bhopal 
5 | ram  | 27 | mumbai 
6 | brajesh | 30 | mumbai 
7 | brajesh | 26 | dehli 
------------------------------------ 

預期結果:

預期結果:

------------------------------------ 
name | age | city 
------------------------------------ 
ram  | 25 | bhopal, indore 
brajesh | 30 | indore, mumbai 
------------------------------------ 
+1

這看起來像是一個獨特的交叉表查詢。 ACCESS和MYSQL完成的方式不同。所以先決定你想要它的方式。如果你使用的是ACCESS,我記得曾經有一種叫做* pivot table *的東西可能會有所幫助。瓦扎德經常處理技術問題。 – itsols

+0

嘿,我編輯了這個問題,現在有兩種格式的預期結果,是的,我想查詢ms訪問 –

+0

你想如何使用所需的查詢結果? – 4dmonster

回答

1

這將這樣的伎倆:

select distinct d1.name, d1.age, concat(d1.city, ' , ' ,d2.city) AS city from 
Details d1 join Details d2 
on d1.name = d2.name 
and d1.age = d2.age 
and d1.city != d2.city 
and d1.id < d2.id 

這是SQLFiddle

另請注意,爲此工作ID必須是唯一的

+0

如果同一個(姓名,年齡)組合在兩個以上的城市中,這將不起作用。我現在最近可以和任意數量的城市一起工作,那就是使用PostgreSQL的'string_agg'函數,如http://sqlfiddle.com/#!12/70cee/2/0 – Yawar

0

不幸的是這是不可能獲得通過查詢第一輸出,由於需要

------------------------------------ 
name | age | city | city 
------------------------------------ 
ram  | 25 | bhopal | indore 
brajesh | 30 | indore | mumbai 
------------------------------------ 

預期輸出的其他格式爲每個不同的城市產卵。

這是如何獲得在MS-進入第二個變體,但它不是最優的: 定義sfunction

public function SitiesOf(Name as String,Age as long) as String 
    dim rst as recordset 
    SitiesOf = ", " 
    set rst = currentdb.Openrecordset("SELECT [city] FROM [Table] WHERE [name]='" & Name & "' AND [age]=" & Age & ";") 
    while not rs.eof 
     SitiesOf = SitiesOf & rst![city] & ", " 
     rst.MoveNext 
    wend 
    rst.close 
    set rst=Nothing 
    SitiesOf = left(SitiesOf , len(SitiesOf)-2) 
end function 

寫入查詢

SELECT [name] , [age] , SitiesOf([name],[age]) FROM [Table] GROUP BY [name] , [age] 
+0

可能是評論。 – Pradeep

+0

對不起,我沒有太多經驗。所以我決定把它回答由於問題必須完全改變有另一個答案 – 4dmonster

+0

嘿,我編輯了這個問題,現在有兩種格式的預期結果,看看,謝謝 –