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

我建议,如果您要求只有一个结果集,请执行以下操作:

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

这是一个单一的查询,但对于示例数据,它确实执行了两次表扫描。更大/真实数据可能会有所不同,我不知道

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