Tsql 如何在一个结果集中包含不同的计数
是否可以有一个optimize单查询语句来返回不同行的计数?见下文:Tsql 如何在一个结果集中包含不同的计数,tsql,Tsql,是否可以有一个optimize单查询语句来返回不同行的计数?见下文: 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
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
这是一个单独的查询,但对于示例数据,它会执行两次表扫描。在更大的/真实的数据上可能会有所不同,我不知道
SELECT
(SELECT COUNT(DISTINCT(id)) FROM #tbl) id,
name
FROM
#tbl
这是一个单独的查询,但对于示例数据,它会执行两次表扫描。在更大的/真实的数据上可能会有所不同,我不知道
SELECT
(SELECT COUNT(DISTINCT(id)) FROM #tbl) id,
name
FROM
#tbl
下面的查询将完全返回问题中指定的结果集,尽管它不是很有效
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
然后在resultset中用NULL'name'值捕获该行。下面的查询将准确返回问题中指定的结果集,尽管效率不高
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
然后在resultset中用空的'name'值捕获该行。同意海报上的说法,即表大小是此解决方案的一个问题。对于小数据集非常有效。同意海报上的说法,表大小将是此解决方案的一个问题。对于小型数据集非常有效。