【问题标题】:How to use alias and sum them together in select query如何在选择查询中使用别名并将它们加在一起
【发布时间】:2012-07-13 08:43:32
【问题描述】:

我有以下问题。我想使用别名并将它们添加在一起,但 SQL 不允许这样做。关于如何在不重复查询的情况下解决此问题的任何建议?使用 Microsoft SQL Server 2008

SELECT    
SUM(CASE WHEN rg.category = 'Space' THEN ((rg.score*20)) END) As space,
SUM(CASE WHEN rg.category = 'QPR' THEN ((rg.score*20)) END) As qpr,

(space + qpr) As result
FROM rg_fin As rg JOIN...../*query goes on*/

【问题讨论】:

    标签: sql database select


    【解决方案1】:

    您可以将查询包装为子查询

    SELECT *,
      (space + qpr) As result 
    FROM
    (
      SELECT     
      SUM(CASE WHEN rg.category = 'Space' THEN ((rg.score*20)) END) As space, 
      SUM(CASE WHEN rg.category = 'QPR' THEN ((rg.score*20)) END) As qpr
      ....
     ) subquery
    

    【讨论】:

      【解决方案2】:

      您可以使用子查询来做到这一点:

      select 
        space, 
        qpr, 
        (space + qpr) As result
      from (
        select
        SUM(CASE WHEN rg.category = 'Space' THEN ((rg.score*20)) END) As space,
        SUM(CASE WHEN rg.category = 'QPR' THEN ((rg.score*20)) END) As qpr,
        FROM rg_fin As rg JOIN...../*query goes on*/
      ) as a
      

      【讨论】:

        【解决方案3】:

        如果要使用别名,则需要将查询包装在另一个查询中:

        SELECT space
            , qpr
            , space + qpr as result
        FROM
        (
            SELECT    
            SUM(CASE WHEN rg.category = 'Space' THEN ((rg.score*20)) END) As space,
            SUM(CASE WHEN rg.category = 'QPR' THEN ((rg.score*20)) END) As qpr,
        
            (space + qpr) As result
            FROM rg_fin As rg JOIN...../*query goes on*/
        ) x
        

        或者如果你不需要使用别名,那么你可以重复这些字段:

        SELECT    
            SUM(CASE WHEN rg.category = 'Space' THEN ((rg.score*20)) END) As space,
            SUM(CASE WHEN rg.category = 'QPR' THEN ((rg.score*20)) END) As qpr,
        
            (SUM(CASE WHEN rg.category = 'Space' THEN ((rg.score*20)) END) 
            + SUM(CASE WHEN rg.category = 'QPR' THEN ((rg.score*20)) END)) As result
        FROM rg_fin As rg JOIN...../*query goes on*/
        

        【讨论】:

          【解决方案4】:

          使用派生表

          SELECT 
              space,qpr,(space + qpr) As result 
          FROM
          (
          SELECT     
          SUM(CASE WHEN rg.category = 'Space' THEN ((rg.score*20)) END) As space, 
          SUM(CASE WHEN rg.category = 'QPR' THEN ((rg.score*20)) END) As qpr, 
          
          (space + qpr) As result 
          FROM rg_fin As rg JOIN...../*query goes on*/ 
          ) as t
          

          【讨论】:

            猜你喜欢
            • 2011-12-21
            • 2021-04-30
            • 2011-09-22
            • 1970-01-01
            • 1970-01-01
            • 2019-12-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多