1

3 列のテーブルがあり、列 1 のデータには繰り返し値があり、列 3 には合計があります。列 1 の各値の上位 2 つの合計を返したいと考えています。

このテーブルを作成するための私のクエリは次のとおりです。

SELECT service,name, total
  FROM [test].[dbo].[TestTable]
  join test1.dbo.service
  on substring(servan,0,4)=servicebn
  where substring(servan,0,4)=servicebn and name <> testname
group by service,name,total
order by service,total desc

どんな助けでも大歓迎です

4

1 に答える 1

2

を使用している場合は、共通テーブル式ウィンドウ関数SQL Server 2005+を使用できます。

WITH recordsList
AS
(
    SELECT  service, name, total,
            DENSE_RANK() OVER (PARTITION BY service 
                                ORDER BY total DESC) rn
    FROM    [test].[dbo].[TestTable]
            INNER join test1.dbo.servd
                on substring(servan,0,4)=servicebn
    where   substring(servan,0,4) = servicebn and 
            name <> testname
)
SELECT  service, name, total
FROM    recordsLIst
WHERE   rn <= 2

FULL TABLE SCAN補足として、このクエリはすべてのテーブルで必要になるため、パフォーマンスが低下します。その理由は結合条件によるものsubstring(servan,0,4)=servicebnです。インデックスを使用しません。

于 2013-01-23T12:16:46.690 に答える