SQL Server - 选择选择不工作

时间:2017-10-29 07:38:32

标签: sql sql-server tsql

我有这个查询,它返回10行:

SELECT 
    substring(testcase_name, 4, len(testcase_name))
FROM 
    TEST_RESULTS 
WHERE 
    test_run_id = 48 
GROUP BY 
    substring(testcase_name,4,len(testcase_name))

我需要计算这些行(需要返回数字 - 在本例中为10)。我需要

SELECT count(*) FROM (my query)

但在SQL Server中,这不起作用。我在互联网上搜索过,我尝试过SELECT count(\*) FROM (my query) t ..我将返回的表命名为#34; t" ..但仍然不适合我...

错误信息是:

  

没有为第1列' t'。

指定列名

也许问题可能是我用子串修改数据?

3 个答案:

答案 0 :(得分:1)

您需要在表达式中添加别名:

SELECT COUNT(*)
FROM (SELECT substring(testcase_name,4,len(testcase_name)) 
      FROM TEST_RESULTS 
      WHERE test_run_id = 48 
      GROUP BY substring(testcase_name,4,len(testcase_name))
     ) t(s);   -- adding column alias

答案 1 :(得分:0)

其他答案将为您提供分组记录的计数。你可能需要的是每组计数,你可以这样做:

WITH cte AS
(
    SELECT substring(testcase_name,4,len(testcase_name)) AS x
    FROM TEST_RESULTS 
    WHERE test_run_id = 48 
)
SELECT x, COUNT(*) AS CountPerX
FROM cte
GROUP BY x;

x    CountPerX
--------------
Foo  123
Bar  234

另一种返回“群组数量”(原始问题)的方法是通过COUNT DISTINCT

SELECT COUNT(DISTINCT substring(testcase_name,4,len(testcase_name))) AS CountGroups
FROM TEST_RESULTS 
WHERE test_run_id = 48;

答案 2 :(得分:0)

这也是使用COUNT DISTINCT的机会,例如:

SELECT COUNT(distinct substring(testcase_name,4,len(testcase_name)))
FROM TEST_RESULTS 
WHERE test_run_id = 48;

另请注意,在此表单中,您不再需要分组。