0

SQL Server 2005 を使用しています。Count()クエリで 3 回使用しています

select    
    p.side,
    p.uid as uid,
    count (p.side) as cside,
    (count (p.side)/ 3) as pairs,
    ((count (p.side)/ 3) * 15 ) as commisonPrice
from  
    tempComm as p
group by 
    p.side , p.uid
order by 
    p.uid;

正しい出力が得られますが、クエリでこの重複を使用して問題を防ぐにはどうすればよいですか?

4

2 に答える 2

2
select 
    side,
    uid,
    cside,
    cside/3 as pairs,
    cside/3*15 as commisonPrice 
from
(
    select
    p.side ,
    p.uid as uid , 
    count (p.side) as cside
    from tempComm as p 
    group by p.side , p.uid
) t
order by uid; 
于 2013-10-12T08:35:45.857 に答える
2

それを行うためのいくつかの方法。

1.共通テーブル式- SQL Server 2005 で導入

; cte as (

    select    
          p.side,
          p.uid as uid,
          count (p.side) as cside
    from  tempComm as p
    group by p.side , p.uid

)

select * , cside / 3 as pairs , (cside / 3) * 15 as commisonPrice
from cte
order by p.uid;

2.派生テーブル

select 
    side,
    uid,
    cside,
    cside/3 as pairs,
    (cside/3)*15 as commisonPrice 
from
(
    select
    p.side ,
    p.uid as uid , 
    count (p.side) as cside
    from tempComm as p 
    group by p.side , p.uid
) t
order by uid; 

他の方法では、最初にデータを挿入し、列に対してさらに操作を実行する必要がある一時テーブル、ビューを使用していますが、質問には必要ないと思います。

ノート :

  1. CTE と派生テーブルはどちらも一度しか使用できません。データに対して複数の操作を実行する必要がある場合は、一時テーブルを使用してください。

  2. パフォーマンスに関しては、CTEと派生テーブルのパフォーマンスは似ていますが、どちらをより読みやすく、理解しにくいものにするかは好みの問題です。

于 2013-10-12T08:51:20.310 に答える