在SQL Server的同一查询中使用别名

时间:2014-07-24 13:17:37

标签: sql sql-server

使用列名称上的别名执行SQL查询时,我尝试在同一查询中引用该别名以对其执行计算。

如:

SELECT QUANTITY, 
       AMOUNT, 
       Count(AMOUNT) AS CntAmount, 
       Sum(CNTAMOUNT) 
FROM   MY_TEST 
GROUP  BY QUANTITY, 
          AMOUNT 

此查询只是一个示例。

我认为您通常会将查询作为别名引用,但这不起作用。如:

SELECT * 
FROM   (SELECT QUANTITY, 
               AMOUNT, 
               Count(AMOUNT) AS CntAmount, 
               Sum(A.CNTAMOUNT) 
        FROM   MY_TEST 
        GROUP  BY QUANTITY, 
                  AMOUNT) a 

3 个答案:

答案 0 :(得分:0)

您可以使用CTE:

WITH CTE1
AS (
    SELECT Quantity
        ,Amount
        ,count(amount) AS CntAmount
    FROM my_test
    GROUP BY Quantity
        ,Amount
    )
SELECT Quanitity
    ,Amount
    ,CntAmount
    ,SUM(CntAmount) AS Myfield
FROM CTE1
GROUP BY Quanitity
    ,Amount
    ,CntAmount

答案 1 :(得分:0)

您可以在同一查询中使用别名,但是......如果您需要使用聚合函数的别名(例如SUM(amount) AS aggregated_aliasAVG()COUNT()等)在同一个查询中,您必须使用子查询。

以下是一个示例子查询:

SELECT 
a.QUANTITY,
a.AMOUNT,
SUM(a.CntAmount) AS SUM_CNTAMOUNT
FROM (SELECT 
      QUANTITY, 
      AMOUNT, 
      Count(AMOUNT) AS CntAmount
      FROM   MY_TEST 
      GROUP  BY QUANTITY,  AMOUNT) AS a
GROUP BY a.QUANTITY, a.AMOUNT

答案 2 :(得分:0)

据我所知,您无法直接使用别名对其执行计算。

因为如果您使用任何名称(例如'xyz')来执行计算,则会搜索表格&如果您使用了别名来执行计算,则它不会永久显示在您的桌面上。

这就是为什么你会收到诸如此类的错误 列名不存在。或列名无效。

       In your case you can do like this :

       ;with CTE  as
    (
    SELECT QUANTITY, 
           AMOUNT, 
           Count(AMOUNT) AS CntAmount 

    FROM   MY_TEST 
    GROUP  BY QUANTITY, 
              AMOUNT   
    )
    select sum(CntAmount),QUANTITY,AMOUNT  as a  from  cte
group by 
GROUP  BY QUANTITY, 
              AMOUNT   

但是,如果您的要求是仅使用别名,那么您也可以将代码包装到CTE&然后 如果需要,可以使用别名

请参考这个。 enter link description here