2015-03-03 42 views
1

我有一個MySQL查詢,我運行它工作正常,但同樣的查詢顯示SQL Server中的錯誤。'a'錯誤列2沒有指定列名

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

錯誤:

No column name was specified for column 2 of 'a'.

如何修改上面的查詢?

+3

MAX(exn_time)GiveMeAColumnName – 2015-03-03 11:21:56

+2

[壞習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive /2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - 舊式*逗號分隔的table * style列表應該不再使用**,而是改爲建議使用ANSI - ** 92 ** S引入的**正確的ANSI JOIN **語法QL標準(超過** 20年前**) – 2015-03-03 11:22:27

+2

另外:如果您使用*表別名*,那麼請嘗試使用**更有意義的別名,而不是僅僅'a','b' ... ....'rd'代表'release_details','tc'代表'tc_details'只會比***更加直觀***,'b' ..... – 2015-03-03 11:23:29

回答

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

你錯過了給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'; 
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' 

由於狀態只能有值「PASS」,MAX(exn_time)是幫不了你的計數,DISTINCT不應該在一開始使用的SELECT時使用組像你的情況,它是多餘的