我有一个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列指定列名。
如何修改上述查询?
答案 0 :(得分:4)
使用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';
答案 1 :(得分: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';
答案 2 :(得分:0)
您的问题显然是结果集中的第二列没有别名。 您可以将整个查询重写为相同的结果:
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,就像你的情况一样是多余的