0

次のことを実現するには、T-SQLステートメントをどのように作成する必要がありますか。

表1:

display_term|occurence

A|1

A|4

B|3

B|9

これを取得

表2:

display_term|occurence

A|4

B|3

AとBの間の「最も近い距離」は1であり、結果の表で確認できます。つまり、最も近い(列 "occurrence")distinct(列 "display_term")レコードをクエリしたいと思います。

前もって感謝します

4

3 に答える 3

0

あなたはあなたが最も近いものが欲しいと言いました。それが何を意味するのかは明確ではありません。上記の例は、各表示用語の最大値を示しています。各表示用語の最大値が必要な場合は、集計を使用します。これは、GroupByおよびMaxメソッドを使用して実現されます。

SELECT display_term, Max(occurence) as MaxOccurrence
FROM TABLE_NAME
GROUP BY display_term
于 2012-12-31T12:55:29.537 に答える
0

たった2つの用語で、次のようなことができます。

declare @T table (display_term char(1) not null,occurence int not null)
insert into @T (display_term,occurence) values
('A',1),
('A',4),
('B',3),
('B',9)

select top 1
    *
from
    @T t1
        cross join
    @T t2
where
    t1.display_term = 'A' and
    t2.display_term = 'B'
order by ABS(t1.occurence - t2.occurence)

生成するもの:

display_term occurence   display_term occurence
------------ ----------- ------------ -----------
A            4           B            3

UNPIVOT(要求した結果セットが正確に必要な場合は、ベースのソリューションを検索できます)


これをより多くの用語に拡張する必要があるかどうかはあなたの質問からは明らかではありません-より多くの用語の要件を再解釈する明確な方法がないので、私は今のところそれを元に戻しました。


UNPIVOT正確な結果セットが必要な場合は、ベースのソリューション。@T上記のように設定します。

select display_term,occurence from (
select top 1
    t1.occurence as A,
    t2.occurence as B
from
    @T t1
        cross join
    @T t2
where
    t1.display_term = 'A' and
    t2.display_term = 'B'
order by ABS(t1.occurence - t2.occurence)
) t unpivot (occurence for display_term in (A,B)) as u

結果:

display_term                         occurence
------------------------------------ -----------
A                                    4
B                                    3
于 2012-12-31T14:19:40.967 に答える
0

単一行の結果が機能する場合は、次のようになります。

SELECT a.display_term AS adt,
       a.occurence As aoc,
       b.display_term AS bdt, 
       b.occurence AS boc,
       ABS(a.occurence - b.occurence) AS distance
FROM my_table a, my_table b
WHERE a.display_term = 'A'
  AND b.display_term = 'B'
  AND ABS(a.occurence - b.occurence) = (
    SELECT MIN(ABS(a.occurence - b.occurence))
    FROM my_table a, my_table b
    WHERE a.display_term = 'A'
      AND b.display_term = 'B'
  )
于 2012-12-31T13:58:28.010 に答える