1

次のAccess2007テーブルがあります。

Company | Item | Quantity
-------------------------
AA      | Ia   | 2
BB      | Ib   | 3
CC      | Ia   | 4
AA      | Ib   | 5 

次の結果のクエリを作成したい

Company | Ia  | Ib
------------------ 
AA      | 2   | 5
BB      |     | 3
CC      | 4   |

でも今は本当に迷っています。

どんな助けでも大歓迎です!ありがとう

4

3 に答える 3

5

これは典型的なクロス集計クエリです。

TRANSFORM Sum(XTabTable.Quantity) AS SumOfQuantity
SELECT XTabTable.Company
FROM XTabTable
GROUP BY XTabTable.Company
PIVOT XTabTable.Item;

これは、Access クエリ ウィザードまたはクエリ デザイン ウィンドウを使用して構築できます。

xtab クエリ

于 2013-01-08T16:30:48.000 に答える
2

独自のピボット/クロス タブを作成できる別の方法。ANSI に完全に準拠しています。SQL Serverそのため、 MS ACCESS SQL とよりインライン化されているため、使用したサンプルについては。フィドルの他のテーブルは無視してください...

* SQLFIDDLE デモ

クエリ:

Select
 company,
 'Ia'=Sum(Case When item = 'Ia' Then Quantity Else 0 End),
 'Ib'=Sum(Case When item = 'Ib' Then Quantity Else 0 End)
 From mytable
 Group By company
 ;

編集: MS Access はサポートしていませんCASE。で短絡IIFます。

 Select
 company,
 Sum(IIF(item = 'Ia', Quantity, 0)) AS Ia,
 Sum(IIF(item = 'Ia', Quantity, 0)) AS Ib
 From mytable
 Group By company
 ;

結果:

    COMPANY     IA  IB
    AA          2   5
    BB          0   3
    CC          4   0

もちろん、これは の数が少ない場合にのみ便利ですitems。あなたはMS Acessを使用しているので、@Remouが指摘したように、その組み込み機能を使用することもできます:)。

于 2013-01-08T16:41:17.863 に答える
0

SQL Serverデータベースにデータを保存することにした場合は、次の方法で保存できます。

Declare @columns Nvarchar(Max), @SQL Nvarchar(Max)

With    DistinctCols As
(
        Select  Distinct Item
        From    AccessTable
)
Select  @columns = Coalesce(@columns + ',','') + '[' + Item + ']'
From    DistinctCols
Order   By Item

Select  @SQL = 'Select  Company, ' + @columns + '
                From    AccessTable at
                Pivot   (Sum(Quantity) For Item In (' + @columns + ')) p'

Exec    sp_executeSQL @SQL
于 2013-01-08T17:05:25.620 に答える