1

行ごとに異なるカウントを返す最適化された単一のクエリステートメントを持つことは可能ですか?下記参照:

create table #tbl (id int, name varchar(30))
go
INSERT INTO #tbl (id, name) values(1, 'test1')
INSERT INTO #tbl (id, name) values(2, 'test2')
INSERT INTO #tbl (id, name) values(1, 'test3')
INSERT INTO #tbl (id, name) values(1, 'test4')
INSERT INTO #tbl (id, name) values(3, 'test5')
INSERT INTO #tbl (id, name) values(1, 'test6')
INSERT INTO #tbl (id, name) values(1, 'test7')
INSERT INTO #tbl (id, name) values(2, 'test8')
INSERT INTO #tbl (id, name) values(1, 'test9')

以下のレコードを返したい:

id      name
---     ----
3       test1
3       test2
3       test3
3       test4
3       test5
3       test6
3       test7
3       test8
3       test9
4

2 に答える 2

3

次のクエリは、あまり効率的ではありませんが、質問で指定された結果セットを正確に返します。

SELECT (SELECT COUNT(DISTINCT id) FROM #tbl), name FROM #tbl

結果セットを1つだけにする必要がある場合は、次のようにすることをお勧めします。

SELECT id, name FROM #tbl 
UNION 
SELECT COUNT(DISTINCT id), NULL FROM #tbl 
ORDER BY name

次に、結果セットでNULL'name'値を使用して行をトラップします。

于 2012-09-26T09:37:28.353 に答える
1

これは単一のクエリですが、サンプルデータでは、2つのテーブルスキャンを実行します。より大きな/実際のデータでは異なる可能性があります、私は知りません

SELECT 
    (SELECT COUNT(DISTINCT(id)) FROM #tbl) id, 
    name 
FROM 
    #tbl
于 2012-09-26T09:36:59.943 に答える