是否可以使用优化单个查询语句,该语句将返回不同行的计数?见下文:
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
答案 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