2011-03-18 65 views
2

这应该很容易,但我得到一个“无效列名称”错误。SQL查询使用列ALIAS

SELECT Transaction, COUNT(ItemId) AS ItemCount 
FROM TransactionTable 
WHERE ItemCount > 5 
GROUP BY Transaction 
ORDER BY ItemCount DESC 

这种说法作品,未经这似乎是双重标准,对我来说,因为ORDER BY使用列别名WHERE子句。

回答

6

使用HAVING,并指定统计再次

SELECT Transaction, COUNT(ItemId) AS ItemCount 
FROM TransactionTable 
GROUP BY Transaction 
HAVING COUNT(ItemId) > 5 
ORDER BY ItemCount DESC 

原因ORDER BY正在与别名是因为SQL查询顺序

处理FROM(包括联接)
ON
OUTER
其中
GROUP BY
HAVING
SELECT
ORDER BY
TOP

+0

感谢,正是我需要的 – Spidy 2011-03-18 20:00:05

0
SELECT [Transaction], COUNT(ItemId) AS ItemCount 
FROM TransactionTable 
WHERE ItemCount > 5 
GROUP BY COUNT(ItemId) 
ORDER BY COUNT(ItemId) DESC 
0

您可以参考列别名在ORDER BY如(逻辑)这是SELECT后处理。要使用WHEREHAVING子句中的列别名,您可以在表格表达式中定义SELECT,例如,如下。

;WITH cte 
    AS (SELECT Transaction , 
       COUNT(itemid) AS itemcount 
     FROM transactiontable 
     GROUP BY Transaction) 
SELECT Transaction , 
     itemcount 
FROM transactiontable 
WHERE itemcount > 5 
ORDER BY itemcount DESC 
0
WITH tempTable AS 
(
    SELECT Transaction, COUNT(ItemId) AS ItemCount 
    FROM TransactionTable 
) 
SELECT * 
FROM tempTable 
WHERE ItemCount > 5 
GROUP BY Transaction 
ORDER BY ItemCount DESC