2

我将 SQL Azure 与 asp 脚本一起使用,并且在我的一生中,没有运气尝试让它工作。我正在运行查询的表有很多列,但我想查询 2 列(名称和电子邮件)上的不同值,我希望它从那里返回整行的值。

我的查询现在的样子:

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

但我需要它返回整行,以便检索其他数据点。如果我在一年前很聪明,我会为联系人创建一个单独的表格,但那是一年前的事了。

在我实现 LiveSearch 功能之前。

4

2 回答 2

0

一种方法是使用 CTE(通用表表达式)。使用此 CTE,您可以按某些标准(即您的quote_contact和)对数据进行分区,quote_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

在这里,我只为每个“分区”(即每对姓名/电子邮件)选择最后一个条目——按时间戳以降序排列。

这是否接近你正在寻找的东西?

于 2012-07-30T19:15:54.213 回答
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
于 2012-07-30T19:22:09.660 回答