简体   繁体   English

使用派生表按ALIAS分组

[英]Using derived table to group by ALIAS

I need help rewriting the following query as I need to group by the aliases and derived tables appear to be the only path open to me. 我需要重写以下查询,因为我需要对别名进行分组,而派生表似乎是向我开放的唯一路径,因此我需要帮助。 I cannot group by Type and SalesDatabase as I get an invalid column error. 由于收到无效的列错误,因此无法按类型和SalesDatabase进行分组。

SELECT    'Transactions'        AS Type,  
          'SalesDb'             AS SalesDatabase,  
          COUNT (B.Id)          AS Total,  
          CASE 
              WHEN SB.name LIKE '%Online%'      THEN 'Online'   
              WHEN SB.name LIKE '%RetailSale%'  THEN 'Retail'   
              ELSE 'Bricks'   
          END AS SalesType,    
          ISNULL( SUM( CASE WHEN datediff( d, b.Inserted, getDate() ) <  1 THEN 1 ELSE 0 END ), 0 ) AS SalesPeriod0,          
          ISNULL( SUM( CASE WHEN datediff( d, b.Inserted, getDate() ) >=  1 and datediff( d, b.Inserted, getDate() ) < 8 THEN 1 ELSE 0 END ), 0 ) AS SalesPeriod1to7 ,         
          ISNULL( SUM( CASE WHEN datediff( d, b.Inserted, getDate() ) >= 8 THEN 1 ELSE 0 END ), 0 ) AS SalesPeriod8p  
FROM SalesItem B WITH (NOLOCK)  
INNER JOIN SalesBatch SB WITH (NOLOCK) ON SB.Id  = B.BatchId    
GROUP BY SB.NAME    

Any help appreciated. 任何帮助表示赞赏。

The query as you have written is correct, if you intend to produce one row PER SB.NAME. 如果您打算产生一行PER SB.NAME,则您所编写的查询是正确的。 It means that you could have 这意味着你可以

SB.NAME    | SalesType   | ...
ABC        | Online      | ...
DEF        | Online      | ...
XYZ        | Retail      | ...
DEF1       | Retail      | ...

However, if you want to group by SalesType, then use this GROUP BY 但是,如果要按SalesType分组,请使用此GROUP BY

GROUP BY CASE 
          WHEN SB.name LIKE '%Online%'      THEN 'Online'   
          WHEN SB.name LIKE '%RetailSale%'  THEN 'Retail'   
          ELSE 'Bricks'   
      END

There is no need for grouping the constants Type and SalesDatabase. 无需将常量Type和SalesDatabase分组。

GROUP BY SB.NAME,  
          CASE 
              WHEN SB.name LIKE '%Online%'      THEN 'Online'   
              WHEN SB.name LIKE '%RetailSale%'  THEN 'Retail'   
              ELSE 'Bricks'   
          END  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM