3

もっと経験があれば、同様の「行のマージ」の質問を使用してこれを理解することはできますが、それらを機能させることはできません。特定のカテゴリのaccdbに約2000の「ガレージ」があります(実際には患者データのある診療所ですが、ここでは簡略化されています)。以下は、1つのガレージのデータがどのように存在するかの例です。

Garage ID   Car_Color        Sub_Type?   Color_Count
    42       Blue            Striped        5
    42       Blue                           10
    42       Red                            23
    42       Yellow                         2

各ガレージを1つのレコードにし、各色をカウント付きの個別のフィールドとして作成する必要があります。目的の出力は次のとおりです。

Garage ID   Blue Cars (total)  Blue Cars (striped)   Red Cars  Yellow Cars   Orange Cars
    42         15                    5                  23          2             0

サブタイプのあるカテゴリが1つあり、ここでは「BlueCars」と「BlueCars(striped)」として示されています。それらの場合、サブタイプのない「青」の数を他の「青」の数と合計して、「青」の合計数を取得する必要があります。次に、Blueサブタイプを別のフィールドとしてリストします。ほとんどのガレージにはオレンジ色の車がリストされていないため、オレンジ色の車の記録がない場合は、そのフィールドのレコードに0を表示させる必要がありますが、記録がある場合はカウントを反映します。

これは他の自己結合と非常に似ているように見えますが、カウントアスペクトを機能させることができないか、レコードがない場合は「0」を取得できません。

4

2 に答える 2

5

IIF()次の式で集計関数を使用できます。

select [Garage ID],
  sum(IIF(Car_color='Blue', Color_Count, 0)) as BlueCarsTotal,
  sum(IIF(Car_color='Blue' AND [Sub_Type?]='Striped', Color_Count, 0)) as BlueCarsStripedTotal,
  sum(IIF(Car_color='Red', Color_Count, 0)) as RedCarsTotal,
  sum(IIF(Car_color='Yellow', Color_Count, 0)) as YellowCarsTotal,
  sum(IIF(Car_color='Orange', Color_Count, 0)) as OrangeCarsTotal
from yourtable
group by [Garage ID]

式を許可する別のデータベースでこれを行っていた場合CASE、クエリは次のようになります。

select [Garage ID],
  sum(case 
       when Car_color='Blue' 
       then Color_Count else 0 end) as BlueCarsTotal
  sum(case 
       when Car_color='Blue' AND [Sub_Type?]='Striped' 
       then Color_Count else 0 end) as BlueCarsStripedTotal,
  sum(case 
       when Car_color='Red' 
       then Color_Count else 0 end) as RedCarsTotal,
  sum(case 
       when Car_color='Yellow' 
       then Color_Count else 0 end) as YellowCarsTotal,
  sum(case 
       when Car_color='Orange' 
       then Color_Count else 0 end) as OrangeCarsTotal
from yourtable
group by [Garage ID]
于 2013-03-18T22:50:29.933 に答える
3

クロス集計が適している場合があります。

TRANSFORM Sum(Garages.Color_Count) AS SumOfColor_Count
SELECT Garages.GarageID
FROM Garages
GROUP BY Garages.GarageID
PIVOT [Car_Color] & " " & [sub_type?];
于 2013-03-18T23:09:34.110 に答える