-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

看起来USER_ID价值是你的串联和使它ORG_ID独一无二的东西。我假设这是来自 COTS 产品,人类不会建造任何东西。

您的愿望是按部门找出有多少条目。在 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 中。

SQLFiddle

我更新了小提琴以显示如果您需要该表中的行中的元素,您如何链接到 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 回答