0

特に、特定の属性を示す約30列のブールフラグを含むテーブルがあります。次のように、頻度で並べ替えて、列名とともにレコードセットとして返します。

Attribute    Count
attrib9      43
attrib13     27 
attrib19     21
etc.

これまでの私の努力は同様のことを達成することができますが、次のような条件付きSUMを使用して列の属性を取得することしかできません。

SELECT SUM(IIF(a.attribIndex=-1,1,0)), SUM(IIF(a.attribWorkflow =-1,1,0))...

さらに、クエリは30個すべてのSUM / IIFですでに少し扱いに​​くくなっており、手動による介入なしでは属性数の変更を処理しません。

属性列の最初の6文字は同じ(属性)であり、テーブル内で一意です。列名にワイルドカードを使用して、該当するすべての列を取得することはできますか?

また、結果をピボットして、並べ替えられた2列のレコードセットを取得できますか?

私はAccess2003を使用していますが、クエリは最終的にExcelからADODBを介して行われます。

4

3 に答える 3

1

単純なカウントとグループ化で実行する必要があります

  Select attribute_name
         , count(*)
      from attribute_table
    group by attribute_name

コメントに答えるには、そのための分析関数を使用します。

 Select attribute_table.*
        , count(*) over(partition by attribute_name) cnt
   from attribute_table
于 2009-05-06T14:24:44.890 に答える
1

これは、データのどこかに属性名があるかどうかによって異なります。もしそうなら、birdlipsの答えがうまくいくでしょう。ただし、名前が列名のみの場合は、もう少し作業が必要になります。単純なSQLでは実行できないのではないかと思います。

いいえ、SQLの列名にワイルドカードを使用することはできません。これを行うには、手続き型コードが必要です(つまり、AccessのVBモジュール-SQL Serverを使用している場合は、ストアドプロシージャ内で実行できます)。このコードを使用してSQLコードを作成します。

かわいくないでしょう。一度に1つの属性を実行する必要があると思います。値がその属性名とcount-where-Trueである文字列を選択し、次にA)それを実行して、結果をスクラッチテーブルの新しい行に格納します。 、またはB)バッチを実行する前に、これらすべての選択を「ユニオン」と一緒に追加します。

私のAccessVBは少し錆びているので、実行可能コードのようなものを提供することはできません。

于 2009-05-06T15:23:51.393 に答える
0

Accessでは、クロスタブクエリ(データセットを転置するための従来のツール)が機能するには、少なくとも3つの数値/日付フィールドが必要です。ただし、出力はExcelに対するものなので、データを非表示のシートに出力してから、ピボットテーブルを使用することを検討しましたか?

于 2009-05-06T17:00:32.503 に答える