レコード数別の上位5グループごとの上位項目(Access SQL)

ファイゼロス

Audit拒否されたクレームの数千のレコードを含む単一の大きなテーブルがありますそれぞれがサプライヤーからのものであり、拒否の理由とステータスがあります。だけidがユニークです。

id |      denial      |   supplier    | status
---|------------------|---------------|---------
 1 | Duplicate claim  | ACME          | Adjusted
 2 | Not authorized   | Umbrella Corp | Adjusted
 3 | Not authorized   | Stark Ind.    | Adjusted
 4 | Rec'd after due  | ACME          | Override
 5 | Duplicate claim  | Stark Ind.    | Adjusted
... etc

私が必要としているのは、レコード数による「調整済み」ステータスクレームの上位5つの拒否理由と、それらの拒否理由のそれぞれに対するレコード数による上位プロバイダーです。

denial          | cnt_denial | top_supplier  | cnt_top_supplier
----------------|------------|---------------|-----------------
Not authorized  | 917        | Stark Ind.    | 351
Duplicate claim | 685        | Stark Ind.    | 195
Not in contract | 525        | ACME          | 216
Rec'd after due | 512        | Umbrella Corp | 500
Explosions      | 349        | ACME          | 231

私は多くの方法を試しましたが、主に他のやや類似したソリューションを適応させようとしましたが、ここではわずかなSQLの知識を超えてしまい、イライラしています。私が試したいくつかの解決策は、MS Access(2010)では機能しません。最初に2つのクエリを作成しましたが、必要な方法でそれらを結合するのに問題があります。

このクエリは、必要な拒否理由データを正確に返します。

SELECT TOP 5 denial, Count(*) AS cnt_denial
FROM Audit
GROUP BY status, denial
HAVING status="Adjusted"
ORDER BY Count(*) DESC;

そして、このクエリには、テーブル内のすべての拒否/サプライヤグループのカウントがあります。拒否の理由ごとにトップサプライヤーを取得する方法がわかりません。簡単なはずですが、問題が発生しています。編集:これは私の主な問題です。拒否の理由ごとにトップの単一サプライヤーを獲得できれば、参加を理解できます。MAXを使ってみましたが、まだ成功していません。/編集

SELECT denial, supplier, Count(*) AS cnt_supplier
FROM Audit
GROUP BY denial, supplier, status
HAVING status="Adjusted"
ORDER BY Count(*) DESC;

これをExcelからADO経由で渡すだけなので、単一のクエリが必要です。どんな助けでも大歓迎です。

shawnt00

これが完全に有効なAccessSQLであるかどうかはわかりません。そうでない場合は、それほど調整する必要はありません。

select
    d.denial,
    d.cnt_denial,
    ds.supplier as top_supplier,
    ds.cnt_supplier as cnt_top_supplier
from
    (
        select top 5 denial, count(*) as cnt_denial
        from Audit
        where status = 'Adjusted'
        group by denial
        order by count(*) desc
    ) d
    inner join
    (
        select denial, supplier, count(*) as cnt_supplier
        from Audit
        where status = 'Adjusted'
        group by denial, supplier
    ) ds
        on ds.denial = d.denial
where not exists (
    select 1
    from Audit as a2
    where a2.status = 'Adjusted'
        and a2.denial = ds.denial and a2.supplier <> ds.supplier
    group by a2.supplier
    having count(*) > ds.cnt_supplier
        /* or count(*) = ds.cnt_supplier and a2.supplier < ds.supplier -- tiebreaker */
)
order by d.cnt_denial desc, ds.supplier

それを使用するtop 5ことにより、タイに関係なく5行のみを取得します。次に、グループごとの上位1つがサブクエリで処理されます。その場合、タイを含めて、最終結果で5行を超える可能性があります。必要に応じて拒否レベルで同点を含めること、または同点を解除してサプライヤランキングから除外することはそれほど難しくありません。

編集:私はいくつかのテストデータをまとめましたが、タイブレイクはSQLServerで機能しているようです。http://rextester.com/ZEWJ43486

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

アクセス中のグループSQLごとの上位nレコード

分類Dev

MySQl-SQL-1日あたりの上位5レコード

分類Dev

SQL Serverは、サイズがX未満のグループごとに上位N行を選択します

分類Dev

SQL-グループごとに上位3つの値を選択しますWITHCONDITION

分類Dev

SQLは週ごとにグループ化された上位のSUMを選択します

分類Dev

BigQuery (標準 SQL) を使用して、グループ化された結果の各グループの上位 n 件のレコードを取得します

分類Dev

T-SQLテーブルを別のテーブルに「結合」し、上位3つのレコードを列として収集する

分類Dev

SQLの月間上位5レコードと、このランクを表示する新しい列

分類Dev

SQL Server 2000 で初めての上位 2 レコードなど

分類Dev

nullフィールドまたはそのフィールドでグループ化されたレコードを持つn個の上位レコードを返すSQLクエリ

分類Dev

sql-指定されたレコードの最上位の親を取得します

分類Dev

SQL Server:各グループから上位の「N」個の最大オカレンスを取得する方法

分類Dev

日付/時間/分ごとのSQLグループレコードと結合テーブル

分類Dev

発生する上位n個のSKUによるSQLグループ

分類Dev

SQL-カウント順に並べられた複数のフィールドでグループ化された上位nを選択します

分類Dev

SQL Serverには、1つの列と他のすべてのレコードに上位1つのレコードが必要です

分類Dev

SQL Server:列ごとに別の列でグループ化

分類Dev

名前の数のSQL合計、年ごとのグループ

分類Dev

JPQL / SQLは、列ごとにグループ化された最新のレコードを取得します

分類Dev

MS Access SQL:月ごとのグループ化

分類Dev

2行ごとのSQLグループ

分類Dev

Microsoft SQL Server2008の列の個別のフィールドから上位2行を取得します

分類Dev

グループごとに上位 K 個の sum() レコードをキーごとにハイブする

分類Dev

SQL Serverクエリから上位5つのレコードを取得する必要がありますが、where句の条件を満たすすべてのレコードの数

分類Dev

投稿SQLごとに上位10件の投稿と10件のコメントを取得

分類Dev

各グループの上位5つのレコードを取得し、グループごとに1行に連結します

分類Dev

SQL Server:上位50%のクエリから返されたレコードをカウントする方法

分類Dev

T-SQLを使用して各グループの上位25%の顧客を見つける

分類Dev

レコードごとの複数行のSQLステートメント

Related 関連記事

  1. 1

    アクセス中のグループSQLごとの上位nレコード

  2. 2

    MySQl-SQL-1日あたりの上位5レコード

  3. 3

    SQL Serverは、サイズがX未満のグループごとに上位N行を選択します

  4. 4

    SQL-グループごとに上位3つの値を選択しますWITHCONDITION

  5. 5

    SQLは週ごとにグループ化された上位のSUMを選択します

  6. 6

    BigQuery (標準 SQL) を使用して、グループ化された結果の各グループの上位 n 件のレコードを取得します

  7. 7

    T-SQLテーブルを別のテーブルに「結合」し、上位3つのレコードを列として収集する

  8. 8

    SQLの月間上位5レコードと、このランクを表示する新しい列

  9. 9

    SQL Server 2000 で初めての上位 2 レコードなど

  10. 10

    nullフィールドまたはそのフィールドでグループ化されたレコードを持つn個の上位レコードを返すSQLクエリ

  11. 11

    sql-指定されたレコードの最上位の親を取得します

  12. 12

    SQL Server:各グループから上位の「N」個の最大オカレンスを取得する方法

  13. 13

    日付/時間/分ごとのSQLグループレコードと結合テーブル

  14. 14

    発生する上位n個のSKUによるSQLグループ

  15. 15

    SQL-カウント順に並べられた複数のフィールドでグループ化された上位nを選択します

  16. 16

    SQL Serverには、1つの列と他のすべてのレコードに上位1つのレコードが必要です

  17. 17

    SQL Server:列ごとに別の列でグループ化

  18. 18

    名前の数のSQL合計、年ごとのグループ

  19. 19

    JPQL / SQLは、列ごとにグループ化された最新のレコードを取得します

  20. 20

    MS Access SQL:月ごとのグループ化

  21. 21

    2行ごとのSQLグループ

  22. 22

    Microsoft SQL Server2008の列の個別のフィールドから上位2行を取得します

  23. 23

    グループごとに上位 K 個の sum() レコードをキーごとにハイブする

  24. 24

    SQL Serverクエリから上位5つのレコードを取得する必要がありますが、where句の条件を満たすすべてのレコードの数

  25. 25

    投稿SQLごとに上位10件の投稿と10件のコメントを取得

  26. 26

    各グループの上位5つのレコードを取得し、グループごとに1行に連結します

  27. 27

    SQL Server:上位50%のクエリから返されたレコードをカウントする方法

  28. 28

    T-SQLを使用して各グループの上位25%の顧客を見つける

  29. 29

    レコードごとの複数行のSQLステートメント

ホットタグ

アーカイブ