2017-09-17 23 views
0

数値を含む列を計算し、他の列も含むデータ・セットの一部として戻す複雑なストアド・プロシージャがあります。私は同じクエリのその特別な列のSUMを返す方法を見つけることを試みています。私はSQL Management Studioを使用し、OUTパラメータまたはRETURN値を使用することを考えていました。しかし、よりSQL的な方法があれば、間違いなくそれを好むでしょう。SQL - 列とその列の値の合計を問合せ結果として取得する方法

SELECT 
    OrID, QN, PRID, PCKID, Person, Price, CSID, 
    CASE 
     WHEN (COUNT(*) OVER (PARTITION BY OrID)) > 1 
      THEN Price * 0.2 
      ELSE Price * 0.1 
    END AS Commission 
FROM 
    (< my subquery >) 

私はまた、上記の文の結果にSUM(Commission)を追加したいと思います。私のデータは、(部分的)である場合

OrID|Price 
----+----- 
1 | 100 
2 | 100 
2 | 50 
3 | 80 

私は、次のような結果

OrID|Price|Commission 
----+-----+---------- 
1 | 100 | 10 
2 | 100 | 20 
2 | 50 | 10 
3 | 80 | 8 

を取得し、どこかで私はまた、最後の列のSUM見たいのですが - 48
何かをExcelのSUMのように、Commission列の末尾にある機能

+0

あなたの質問には使用しているデータベースでタグを付けます。また、サンプルデータと望ましい結果を提供してください。 –

答えて

1

サブクエリ:

SELECT s.*, SUM(Commission) OVER (PARTITION BY OrId) as sum_commission 
FROM (SELECT OrID, QN, PRID, PCKID, Person, Price, CSID 
      (CASE WHEN (count(*) OVER (PARTITION BY OrID)) > 1 
        THEN Price*0.2 
        ELSE Price*0.1 
       END) AS Commission 
     FROM (< my subquery > 
      ) s 
    ) s; 

OrIdとします。 partition byを削除しない場合。

+0

今、s。*の各列に対して、 "集計関数またはGROUP BY句のいずれにも含まれていないため、選択リストに無効です。"サブクエリの最初の列にGROUP BYを追加しようとしましたが、次のようにエラーが発生しました。エラーについて少しお読みになる。誰かが読みやすいリンクを持っていますか? @ LuisShraga。 –

+0

。 。私は質問にタイプミスがありました。それは、それがそのエラーを生成することは驚くべきことです。 –

+0

最初に正しい方法でクエリを変更しました。エラーはおそらく関連していません。はるかに単純なクエリと外部クエリが内部クエリから列を取得しようとするたびに再生しようと - 私はこのエラーが発生します。外側のクエリでSUM(Commission)のみを取得することはOKですが、もちろん、1つの列しか出力されず、すべてのデータを含むレポートとして取得したいと思います。 GROUP BYステートメント内のすべての内部クエリ列を追加すると、これは完全に役に立たなくなります。これは、同じ列の新しい列にコミッションのSUMだけが表示されるためです。 –

関連する問題