如何在一个结果集中包含不同的计数

时间:2012-09-26 09:25:13

标签: tsql

是否可以使用优化单个查询语句,该语句将返回不同行的计数?见下文:

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

2 个答案:

答案 0 :(得分: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”值的行。

答案 1 :(得分:1)

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

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