2013-12-16 64 views
1

希望這是有道理的。我有一張桌子上有一堆記錄。每個記錄都有一個uniqueID和一個稱爲pro的localID。 UniqueID不會重複,但可以有多個具有相同localID的記錄。我試圖建立一個查詢,儘管可能有15個記錄具有相同的localID,但只需向我顯示其中的1個。任何人,沒關係。我如何解決這個問題?我嘗試過:從基於不同列的表中選擇

SELECT DISTINCT id, pro FROM ProLookup WHERE pro LIKE '%" & replace(q,"'","''") & "%'" 

但是沒有奏效。 「q」是最終用戶搜索pro(localID)的查詢。我不是SQL專家,所以我確信我做錯了什麼。任何和所有的幫助,非常感謝!

回答

2

如果您可以獲得最大的ID,那麼這將工作。

SELECT 
    MAX(id) AS id, 
    pro 
FROM ProLookup 
WHERE pro LIKE '%" & replace(q,"'","''") & "%'" 
GROUP BY pro 
+0

制定出巨大。認爲你可以向我解釋這個sql? – Damien

+1

所以MAX()聚合函數拉出「最大」的id。既然你有多個id,對於每個pro只能看到一個pro,可以使用group by來基本拉每個不同的pro,然後是每個不同pro的最大id,你也可以使用MIN()來獲得最小的id,並且,如果你實際上不需要id字段,那麼你可以把它放在select之外然後DISTINCT將工作 – SteveB

+0

感謝您的澄清 – Damien

0
SELECT id, pro 
FROM 
(
SELECT id, pro , ROW_NUMBER() OVER (PARTITION BY pro ORDER BY id) AS RN 
FROM ProLookup 
WHERE pro LIKE YourCondition --<-- Only if you want certain Pro ids, if you 
)Q         -- want all Distinct Pro Ids, take where clause 
WHERE RN = 1      -- Out. 
+0

感謝respondi恩......我接受了下面的答案,因爲實施起來很容易。謝謝! – Damien

+0

沒問題朋友無論幫助你:) –

1

也許SELECT TOP 1 id, pro FROM ProLookup WHERE pro LIKE '%" & replace(q,"'","''") & "%'"

究竟是什麼不對您的查詢?即給出錯誤或不正確的數據。

是額外的「末有必要嗎?SQL Server不特別喜歡雙引號因此,如果正在傳遞到查詢,你可能需要刪除它取決於您的環境。

+0

這是來自一個asp頁面。該查詢將返回1個結果。 – Damien

+0

@Damien那麼額外的「如果它是從asp直接發送的,那麼它是好的,所以你不需要1個結果?如果我猜的是正確的,你應該在你的問題中指定你不是在尋找一個特定的但是你正在填充各種各樣的樣子,下次試着把你的預期結果放在你的問題中,讓別人更好地瞭解你所追求的內容,正如你所看到的那樣,我的困惑從此而來。 – shadowjfaith