-1

現在、ビジュアル ビジネス インテリジェントを使用してレポート サービスを作成しています。

org_id の下に作成されたユーザーの数を数えようとしています。

しかし、レポートは複数の org_id で構成されています。その特定の org_id の下で作成された数を数えるのは困難です。

TBL_USER

USER_ID

0001122
0001234 
ABC9999         
DEF4545
DEF7676

TBL_ORG

ORG_ID

000
ABC
DEF

期待される出力

TBL_RESULT

USER_CREATED

000 - 2
ABC - 1
DEF - 2

私の理解では、ネストSELECTが必要ですが、これまでのところ私は何もしていません。

SELECT COUNT(TBL_USER.USER_ID) AS Expr1
FROM TBL_USER INNER JOIN TBL_ORG 
WHERE TBL_USER.USER_ID LIKE 'TBL_ORG.ORG_ID%')

これは完全に間違っています。しかし、それが手がかりになることを願っています。

4

1 に答える 1

0

値はyourとそれを一意にする何かUSER_IDの連結のようです。これはCOTS製品からのものであり、人間が構築したものではないと思います.ORG_ID

あなたの目的は、部門ごとにいくつのエントリがあるかを調べることです。SQL では、by要件内の単語を読むと、それはグループ化を意味します。実行したいアクションはカウントを取得することであり、その予約語は ですCOUNT。TBL_ORG から何かが必要でない限り、参加する必要はないと思います

SELECT
    LEFT(T.USER_ID, 3) AS USER_CREATED
,   COUNT(1) AS GroupCount
FROM
    TBL_USER AS T
GROUP BY
    LEFT(T.USER_ID, 3)

集計に含まれないもの (COUNT、SUM、AVG など)は、GROUP BY に含める必要があります。

SQLフィドル

そのテーブルの行の要素が必要な場合に TBL_ORG にリンクする方法も示すように、フィドルを更新しました。

-- Need to have the friendly name for an org
-- Now we need to do the join
SELECT
    LEFT(T.USER_ID, 3) AS USER_CREATED
,   O.SOMETHING_ELSE
,   COUNT(1) AS GroupCount
FROM
    TBL_USER AS T
    -- inner join assumes there will always be a match
    INNER JOIN
        TBL_ORG AS O
        -- Using a function on a column is a performance killer
        ON O.ORG_ID = LEFT(T.USER_ID, 3)
GROUP BY
    LEFT(T.USER_ID, 3)
,   O.SOMETHING_ELSE;
于 2013-09-13T03:08:13.627 に答える