3

我有一个 MySQL 查询,我运行它工作正常,但相同的查询在 SQL Server 中显示错误。

SQL Server 查询:

SELECT 
    COUNT(*) cnt 
FROM 
    (SELECT DISTINCT 
         tc_id, MAX(exn_time), STATUS 
     FROM 
         release_details a, tc_details b  
     WHERE 
         a.project = b.project 
         AND a.tc_id = b.tc_name 
         AND logicaldel = 0 
         AND a.project = 'test' 
     GROUP BY 
         tc_id, STATUS) a 
WHERE 
    a.status = 'PASS';

错误:

没有为“a”的第 2 列指定列名。

如何修改上述查询?

4

3 回答 3

5

Alias name用于您的内部查询。您正在获取MAX(exn_time)但未指定该列的名称,这就是引发错误的原因。您可以使用Joins表来使其更具可读性。

SELECT COUNT(*) cnt 
FROM (
     SELECT DISTINCT 
         tc_id,
         MAX(exn_time) AS Maxtime ,
         STATUS 
      FROM 
         release_details a JOIN tc_details b  
           ON a.project= b.project 
             AND a.tc_id = b.tc_name 
      WHERE 
           logicaldel = 0  
           AND a.project ='test' 
      GROUP BY 
         tc_id,
         STATUS 
      ) a 
 WHERE a.status='PASS';
于 2015-03-03T11:21:01.110 回答
1

你错过了给Alias name内部子查询

同样正如 Marc_s 所提到的,您需要使用正确的Inner Join,保留连接条件ON子句并将过滤器移动到where子句

SELECT Count(*) cnt
FROM   (SELECT DISTINCT tc_id,
                        Max(exn_time) Max_exn_time,
                        STATUS
        FROM   release_details a
               INNER JOIN tc_details b
                       ON a.project = b.project
                          AND a.tc_id = b.tc_name
        WHERE  a.project = 'test'
               AND logicaldel = 0
        GROUP  BY tc_id,
                  STATUS) a
WHERE  a.status = 'PASS'; 
于 2015-03-03T11:22:15.703 回答
0

您的问题显然是结果集中的第二列 a 没有别名。您可以将整个查询重写为此以获得相同的结果:

SELECT
    COUNT(DISTINCT tc_id) cnt
FROM 
    release_details a
JOIN
    tc_details b  
ON
    a.project = b.project 
    AND a.tc_id = b.tc_name 
WHERE
    logicaldel = 0 
    AND a.project = 'test' 
    AND STATUS = 'PASS'

由于 STATUS 只能具有值“PASS”,因此 MAX(exn_time) 对您的计数没有帮助,在您的情况下使用 group by 时,不应在 SELECT 的开头使用 DISTINCT,这是多余的

于 2015-03-03T11:51:00.297 回答