3

このクエリが機能しています:

      select cap_idPlanoContasFin  , [3684],[2234],[2] ,  
      from 
      (
      select cap_idPlanoContasFin,cap_idempresa,sum(cap_valorfatura) 
          as Stotal    
          from erp_ContasPagar 
       group by cap_idPlanoContasFin , cap_idEmpresa 

       ) as sourcetable
       pivot 
       (sum(Stotal)for cap_idEmpresa in ([3684],[2234],[2])
       )as pivottable;

このクエリは次を返します。

      cap_idPlanoContasFin  3684          2234       2
                      3 9000          NULL      NULL
                     10 1057840,68    NULL  1865081,35
                     11 NULL          7283,1    591,9
                     12 NULL          NULL  178914,45
                     13 9305,07       1117,6    500
                     14 NULL          59333,5   34611,74

同じクエリに水平合計の例を入れたい:

      cap_idPlanoContasFin  3684      2234            2           Total
      ---------------------------------------------------------------------      
                       13   9305,07    1117,6   500          10922,67

これを作る方法は?で何かを読みましたUNION

4

2 に答える 2

6

まず第一に、事前にデータをグループ化する必要はありません。PIVOT 句がそれを行います。したがって、GROUP BY 句を削除し、SUM()それに応じて PIVOT の 's 引数を変更できます。

select cap_idPlanoContasFin, [3684], [2234], [2]  
from 
(
  select cap_idPlanoContasFin, cap_idempresa, cap_valorfatura
    from erp_ContasPagar 
  group by cap_idPlanoContasFin , cap_idEmpresa
) as sourcetable
pivot 
(
  sum(cap_valorfatura) for cap_idEmpresa in ([3684], [2234], [2])
) as pivottable;

合計列を追加するには、次のようなウィンドウ を使用できます。SUM()

select cap_idPlanoContasFin, [3684], [2234], [2], Total
from 
(
  select cap_idPlanoContasFin, cap_idempresa, cap_valorfatura,
         sum(cap_valorfatura) over (partition by cap_idPlanoContasFin) as Total
    from erp_ContasPagar 
) as sourcetable
pivot 
(
  sum(cap_valorfatura) for cap_idEmpresa in ([3684], [2234], [2])
) as pivottable;

ただし、PIVOT 句にリストされている値以外の値sourcetableを持つ行が含まれている場合は、対応する値も加算されることに注意してください。したがって、次のように、ピボットする前に行セットをフィルター処理することができます。cap_idEmpresacap_valorfaturasourcetable

select cap_idPlanoContasFin, [3684], [2234], [2], Total
from 
(
  select cap_idPlanoContasFin, cap_idempresa, cap_valorfatura,
         sum(cap_valorfatura) over (partition by cap_idPlanoContasFin) as Total
    from erp_ContasPagar 
   where cap_idempresa in (3684, 2234, 2)
) as sourcetable
pivot 
(
  sum(cap_valorfatura) for cap_idEmpresa in ([3684], [2234], [2])
) as pivottable;
于 2012-11-16T15:54:05.240 に答える
1

すべてのおかげで、これは最終的なクエリです:

 select cap_idPlanoContasFin, plc_classificador, plc_nomeConta,[3684], [2234], [2], 
 isnull ([2234],0) + isnull ([2],0) AS Subtotal ,Total    
 from 
 (
 select A.cap_idempresa, A.cap_idPlanoContasFin,  A.cap_valorfatura, 
 B.plc_classificador , B.plc_nomeConta,
 sum(A.cap_valorfatura) over (partition by A.cap_idPlanoContasFin) as Total
 from erp_ContasPagar A /*where cap_idempresa in (3684, 2234, 2)*/ 
 inner  join  tbl_PlanoFinanceiro B on A.cap_idPlanoContasFin = B.plc_id
 )  as sourcetable
 pivot 
 (
 sum(cap_valorfatura) for cap_idEmpresa in ([3684], [2234], [2])
 ) as pivottable;

isnull を使用して NULL を o で sume subtotal に変更する必要があります。助けてくれてありがとう

于 2012-11-19T13:16:00.503 に答える