2

こんにちは、StackOverflow の同僚です。

私は手短に、要点を切り詰めます:

私は Windows XP で C++ を使用し、ADO を使用して MS Access 2007 データベースにアクセスしています。

TypeOfObject と InstaledPower というタイトルの 2 つの列を含む MS Access 2007 のテーブルがあります。

実際のテーブルは次のようになります。

   | TypeOfObject | InstaledPower |
   -------------------------------
   |     Type1    |     1000      |
   -------------------------------
   |     Type2    |     2000      |
   -------------------------------
   |     Type3    |      450      |
   -------------------------------
   |     Type4    |      800      |   
   -------------------------------
   |     Type1    |      800      |  
   -------------------------------

次のように、その型の TypeOfObject と sum( InstaledPower ) を表示するクエリが必要です。

TypeOfObject の値が Type1 または Type2 の場合、その値を変更せずにテーブルに表示し、それ以外の場合は OtherTypes としてマークします。結果は次のようになります。

   | TypeOfObject | SUM(InstaledPower) |
   -------------------------------------
   |     Type1    |     1800           |  <--- 1000 + 800 = 1800
   -------------------------------------
   |     Type2    |     2000           |  <--- only one Type2, so it is 2000
   -------------------------------------
   |   OtherTypes |     1250           |  <--- sum( InstaledPower ) of Type3 and Type4
   ------------------------------------

私はこのクエリで試しました:

   SELECT TypeOfObject , 
   SUM( InstaledPower  ) as [SUM(InstaledPower)] 
   FROM MyTable
   group by TypeOfObject  ;

しかし、私はこれを取得します:

   | TypeOfObject | SUM(InstaledPower) |
   -------------------------------------
   |     Type1    |     1800           | <--- correct
   -------------------------------------
   |     Type2    |     2000           |
   -------------------------------------
   |     Type3    |      450           | <--
   -------------------------------------    |-- this isn't what I need, see above
   |     Type4    |      800           | <--  
   -------------------------------------

SOアーカイブを閲覧してみましたが、同様のものを見つけましたが、何も役に立ちませんでした。

インターネットで検索したところ、この問題はピボット テーブルで解決できるかもしれないという結論に達しましたが、適切に使用する方法がわかりません。その場合、ピボット テーブルがこれを解決できれば、いくつかのリンクが大幅に改善されます。感謝。

他にお手伝いできることがあれば、お尋ねください。喜んでお手伝いします。

助けようとするすべての人に感謝します。

4

2 に答える 2

3
SELECT IIF(TypeOfObject in('Type1', 'Type2'), TypeOfObject, 'OtherTypes') as TypeOfObject , 
       SUM( InstaledPower  ) as [SUM(InstaledPower)] 
       FROM MyTable
 group by IIF(TypeOfObject in('Type1', 'Type2'), TypeOfObject, 'OtherTypes')

;

この構文が Access 2007 で機能するかどうかはわかりません。一部のデータベースでは、caseではなく式が好まれますIIF()

ただし、select リストの最初の式を group by で正確に繰り返すことが重要です。

于 2013-08-10T01:44:09.240 に答える
0
   SELECT TypeOfObject , 
   SUM(IIF(TypeOfObject = 'Type1', InstaledPower, 0)) as [Type1Sum],
   SUM(IIF(TypeOfObject = 'Type2', InstaledPower, 0)) as [Type2Sum],
   SUM(IIF(TypeOfObject <> 'Type2' 
           AND TypeOfObject <> 'Type2', InstaledPower , 0)) as [OtherTypeSum]
   FROM MyTable
   group by TypeOfObject;

[行をピボットする必要があるかもしれません。]

于 2013-08-10T01:40:19.237 に答える