2

私はSQL Azureをaspスクリプトで使用していますが、私の人生では、これを機能させようとしてもうまくいきませんでした。クエリを実行しているテーブルには多くの列がありますが、2 つの列 (名前と電子メール) で個別の値をクエリしたいので、そこから行全体の値を返したいと考えています。

私のクエリは今どのように見えますか:

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

しかし、他のデータ ポイントを取得できるように、行全体を返す必要があります。1 年前に賢かったら、連絡先専用の別のテーブルを作成したでしょうが、それは 1 年前のことです。

LiveSearch 機能を実装する前に。

4

2 に答える 2

0

1 つのアプローチは、CTE (Common Table Expression) を使用することです。この CTE を使用すると、データをいくつかの基準 ( quote_contactand など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 に答える