1

我正在尝试在 sql 中执行查询以仅获取与多个描述相关联的代理记录

示例:表名:AGENT

AGENCY_ID   PRODUCT_DESC  AGENT number
100            ABC        2000
101            ABC        2001
101            XYZ        2002
102            XYZ        2003

AGENCY_ID 101 有 ABC 和 XYZ 描述。从表中,我只想从重叠机构中提取记录

在上述情况下,我只想拉:

AGENCY_ID   PRODUCT_DESC  AGENT number
101         ABC           2001
101         XYZ           2002

我还尝试在业务对象 webi 报告查询过滤器中执行此操作。

请建议我解决我的问题。

提前致谢!

4

3 回答 3

0

或者,如果您的 RDBMS 支持窗口/分析函数;可以获取重复 agent_ID 的计数,然后将该计数用作过滤器。

示例:这里的 cte 只是为了在 Hana 数据库中设置数据,所以我使用 from dummy 来获取一个名为 CTE 的派生表。

然后我们在带有 count() 分析的子查询中使用该派生表,以通过机构 ID 获取记录计数,然后我们显示所有此类记录,其中计数 > 1

需要子查询/内联视图,因为我们需要先生成 CNT 结果,然后才能对其进行限制;并且不能在 have / where 子句中使用分析/窗口函数。

With CTE (AGENCY_ID,PRODUCT_DESC,AGENT_number) AS (
SELECT 100,            'ABC',        2000 from dummy union all
SELECT 101,            'ABC',        2001 from dummy union all
SELECT 101,            'XYZ',        2002 from dummy union all
SELECT 102,            'XYZ',        2003 from dummy)

SELECT B.* 
FROM (SELECT *, count(*) over (partition by Agency_ID) cnt 
      FROM CTE) B
WHERE cnt > 1
于 2018-07-27T21:15:44.860 回答
0

SQL中,您可以使用subquery

select t.*
from table t
where exists (select 1 from table  where AGENCY_ID = t.AGENCY_ID and PRODUCT_DESC <> t.PRODUCT_DESC);

大多数DBMS都无法使用,<>因此请使用!=以防万一。

于 2018-05-03T18:40:15.673 回答
0

方式之一

DECLARE @tblActivity AS TABLE (AGENCY_ID INT , PRODUCT_DESC VARCHAR(100), AGENTnumber INT)
INSERT INTO @tblActivity (Agency_id,Product_Desc,AGentNumber)
VALUES
(100,'ABC', 2000),
(101,'ABC', 2001),
(101,'XYZ', 2002),
(102,'XYZ', 2003)

SELECT tmp.*
FROM @tblActivity tmp 
INNER JOIN @tblActivity tmp1 ON tmp1.AGENCY_ID = tmp.AGENCY_ID
                      AND tmp1.AGENTnumber != tmp.AGENTnumber
                      AND tmp1.PRODUCT_DESC != tmp.PRODUCT_DESC
于 2018-05-03T18:41:32.383 回答