Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 如何在一个结果集中包含不同的计数_Tsql - Fatal编程技术网

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

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

是否可以有一个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) 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'值捕获该行。

同意海报上的说法,即表大小是此解决方案的一个问题。对于小数据集非常有效。同意海报上的说法,表大小将是此解决方案的一个问题。对于小型数据集非常有效。