2012-09-26 56 views
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 

回答

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 

,然后捕获与在结果空“名称”值的行。

1

这是一个单一的查询,但与示例数据它做两次表扫描。我不知道

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

同意海报,表格大小将是这个解决方案的问题。对于小数据集非常有效。 –

相关问题