Sql server 未为';的第2列指定列名;a';错误

Sql server 未为';的第2列指定列名;a';错误,sql-server,mssql-jdbc,Sql Server,Mssql Jdbc,我有一个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

我有一个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列指定列名


如何修改上述查询?

使用
别名进行内部查询。您将获得
最大值(exn\u time)
,但未指定该列的名称,这就是引发错误的原因。您可以使用
连接到表中,使其更具可读性

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';

您没有在子查询中提供
别名

正如Marc_s所提到的,您需要使用适当的
内部联接
,将联接条件
保留在
子句上,并将筛选器移动到
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'; 

您的问题显然是resultset 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'
由于“状态”只能有“通过”值,最大值(exn_时间)对计数没有帮助,在使用group by时,不应在SELECT的开头使用DISTINCT。在您的情况下,它是多余的

MAX(exn_时间)GiveMeAColumnName-旧样式的逗号分隔表列表样式不应再使用,而是建议使用ANSI-92 SQL标准(20多年前)引入的正确ANSI JOIN语法:如果使用表别名,请尝试使用更有意义的别名,而不仅仅是
a
b
<对于
release\u details
而言,code>rd
tc
对于
tc\u details
而言,将比
a
b
更加直观。。。。。