Sql server 未为';的第2列指定列名;a';错误
我有一个MySQL查询,运行得很好,但同样的查询在SQL Server中显示错误 SQL Server查询: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
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
更加直观。。。。。