3

以下の質問があります。エイリアスを使用して一緒に追加したいのですが、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*/
4

4 に答える 4

4

クエリをサブクエリとしてラップできます

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
于 2012-07-13T13:32:37.800 に答える
1

これは、サブクエリを使用して実行できます。

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
于 2012-07-13T13:31:52.060 に答える
1

エイリアスを使用する場合は、クエリを別のクエリでラップする必要があります。

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*/
于 2012-07-13T13:42:39.833 に答える
0

派生テーブルを使用する

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
于 2012-07-13T13:32:32.230 に答える