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

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 の 2 番目の列にエイリアスがないことです。同じ結果を得るために、クエリ全体をこれに書き直すことができます。

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) はカウントに役立ちません。DISTINCT は、あなたの場合のように group by を使用する場合、SELECT の最初に使用しないでください。冗長です。

于 2015-03-03T11:51:00.297 に答える