2012-07-30 51 views
2

我正在使用SQL Azure與asp腳本,對於我的生活,沒有運氣試圖讓這個工作。我正在運行一個查詢的表有很多列,但我想查詢2列(名稱和電子郵件)上的不同值,從那裏我希望它返回整個行的值。基於不同的列值返回行數據

什麼我的查詢看起來像現在:

SELECT DISTINCT quote_contact, quote_con_email 
FROM quote_headers 
WHERE quote_contact LIKE '"&query&"%' 

但我需要它返回整行,所以我可以檢索其他數據點。如果我一年前很聰明,我會爲聯繫人創建一個單獨的表格,但那是一年前的事。

而之前我實現LiveSearch功能。

+1

但是,如果你有兩個具有相同的名稱和電子郵件五行 - 你想顯示其五行?你不能真正將五行的數據合併爲一個......。 – 2012-07-30 19:12:49

回答

0

一種方法是使用CTE(公用表表達式)。有了這個CTE,您可以按照一些標準對數據進行分區 - 即您的quote_contactquote_con_email - 並且SQL Server編號對於每個分區都從1開始,按照其他條件排序,即可能爲SomeDateTimeStamp

因此,嘗試這樣的事:

;WITH DistinctContacts AS 
(
    SELECT 
     quote_contact, quote_con_email, (other columns here), 
     RN = ROW_NUMBER() OVER(PARTITION BY quote_contact, quote_con_email ORDER BY SomeDateTimeStamp DESC) 
    FROM 
     dbo.quote_headers 
    WHERE 
     quote_contact LIKE '"&query&"%' 
) 
SELECT 
    quote_contact, quote_con_email, (other columns here) 
FROM 
    DistinctContacts 
WHERE 
    RowNum = 1 

在這裏,我只選擇每個「分區」的最後一項(即每對名/電子郵件) - 由時間排序降序方式郵票。

這是否接近你要找的?

+1

Marc,這種方法聽起來就像我在找的東西。我將不得不立即嘗試。 – hatrickwah 2012-07-30 19:54:45

+1

經過一番修改之後,我能夠很好地工作。該查詢將結果數量減少爲過去頭文件中大部分錯誤的遺漏類型,否則,效果很好。萬分感謝。 – hatrickwah 2012-07-30 20:52:01

0

您需要提供更多詳細信息。 這是我能想出沒有他們:

WITH dist as (
SELECT DISTINCT quote_contact, quote_con_email, RANK() OVER(ORDER BY quote_contact, quote_con_email) rankID 
FROM quote_headers 
WHERE quote_contact LIKE '"&query&"%' 
), 
data as (
SELECT *, RANK() OVER(ORDER BY quote_contact, quote_con_email) rankID FROM quote_headers 
) 
SELECT * FROM dist d INNER JOIN data src ON d.rankID = src.rankID