2010-07-25 173 views
0

我有一個查詢返回學生和他們的室友。這個想法是讓每個人都出現在第一欄,然後是第2欄和第3欄,讓每個室友都有。第3列可以是空白的,但第1列和第2列總會有結果。SQL試圖只選擇幾個返回的第一條記錄

我的查詢是返回正確的數據,除了當我有3人在房間裏,我會得到多個記錄。如下所述。

_roommate1 roommate2 roommate3 room1_ 
_roommate1 roommate3 roommate2 room1_ 
_roommate2 roommate1 roommate3 room1_ 
_roommate2 roommate3 roommate1 room1_ 
_roommate3 roommate1 roommate2 room1_ 
_roommate3 roommate2 roommate1 room1_ 

所有我想要做的就是保持每行的第一個實例後場出現在第1列

,所以我想輸出減少:

_roommate1 roommate2 roommate3 room1_ 
_roommate2 roommate1 roommate3 room1_ 
_roommate3 roommate1 roommate2 room1_ 

目的是向第1欄的每個人發送一封表格信,告訴他們室友的姓名。

由於我只能在一行上使用不同的字段,而不是在字段上使用,所以我處於暫時的損失狀態,因爲我可能會這樣做。我想能夠做的是說,如果它的工作是:

SELECT (DISTINCT Column1), column2, column3所以我只會得到每個column1的第一個實例。有什麼建議麼?

+0

可能的重複:http://stackoverflow.com/questions/251278/select-one-column-distinct-sql – Gian 2010-07-25 18:21:40

+0

您能否包含您用於生成示例輸出的查詢? – 2010-07-26 13:52:54

+0

你能否給我們一個精簡版的桌子,好嗎? – 2010-07-26 14:55:08

回答

0

試試這個

SELECT Column1, MAX(Column2) AS Column2, MAX(Column3) AS Column3 
FROM MyTable 
GROUP BY Column1 
+0

這會給每個學生返回一行單行,是:'_roommate1 roommate3 roommate3 room1_' – 2010-07-25 18:32:57

+0

這會給每個學生一行,但並不能解決顯示roommate2和roommate3爲單獨條目的問題。 – 2010-07-25 23:09:03

+0

對不起。我顯然很困惑。首先,看看我能否改正我的第一次嘗試。在SELECT子句中,如果第2列更改爲「MIN(Column2)AS Column2」,是否解決了問題? 如果這不起作用,您能否告訴我們您是否正在使用SQL Server,MySql,Oracle等? – bobs 2010-07-26 17:47:01

-1

這是一個瘋狂的問題。你做錯了什麼。爲什麼你需要執行這個查詢?將其分解爲多個查詢並在編程中彙總數據。看來你要求數據庫做一些非標準和奇怪的事情。

+2

我想這意味着你沒有解決方案? – 2010-07-26 10:54:54

+0

你沒有提供任何問題。你只是說你有一個不起作用的查詢。你要通過這樣做來解決什麼問題? – 2010-07-26 11:21:44

+0

數據庫比腳本語言處理數據要快得多,所以繁重的工作(即數據聚合,過濾)應由他們處理。 – jnns 2013-08-26 07:12:45