Sql 如何在Oracle中使用分区获取记录计数
我有以下疑问:Sql 如何在Oracle中使用分区获取记录计数,sql,oracle,oracle12c,window-functions,Sql,Oracle,Oracle12c,Window Functions,我有以下疑问: SELECT F.IID, F.E_NUM AS M_E_NUM, MCI.E_NUM AS MCI_E_NUM, F.C_NUM AS M_C_NUM, MCI.C_NUM AS MCI_C_NUM, F.ET_ID AS M_ET_ID, EDIE.ET_ID AS ED_INDV_ET_ID, COUNT(*) OVER (PARTITION BY F.IID) IID_COUNT FROM FT_
SELECT
F.IID,
F.E_NUM AS M_E_NUM,
MCI.E_NUM AS MCI_E_NUM,
F.C_NUM AS M_C_NUM,
MCI.C_NUM AS MCI_C_NUM,
F.ET_ID AS M_ET_ID,
EDIE.ET_ID AS ED_INDV_ET_ID,
COUNT(*) OVER (PARTITION BY F.IID) IID_COUNT
FROM FT_T F JOIN CEMEI_T MCI ON F.IID = MCI.IID
JOIN EDE_T EDE ON MCI.E_NUM = EDE.E_NUM
JOIN EDIE_T EDIE ON EDIE.IID = F.IID AND EDIE.ET_ID = EDE.ET_ID
WHERE
F.DEL_F = 'N'
AND MCI.EFF_END_DT IS NULL
AND MCI.TOS = 'BVVB'
AND EDE.PTEND_DT IS NULL
AND EDE.DEL_S = 'N'
AND EDE.CUR_IND = 'A'
AND EDIE.TAR_N = 'Y'
AND F.IID IN
(
SELECT DISTINCT IID
FROM FT_T
WHERE GROUP_ID = 'BG'
AND DEL_F = 'N'
AND (IID, E_NUM) NOT IN
(
SELECT IID, E_NUM FROM CEMEI_T
WHERE TOS = 'BVVB' AND EFF_END_DT IS NULL
)
);
我基本上是从几个表中获取信息,并创建它们的平面记录
除了现在我需要找出FT\u T
表中是否有两条记录具有相同的IID
,并显示这两条记录作为结果集的一部分
我尝试使用分区,但结果集中的所有行都返回一个计数,即使其中有两个记录在FT\u T
中具有相同的IID
我最初说我从几个表收集信息的原因是,如果同一个
IID
没有两条记录,那么FT\u T
可能没有我需要的所有信息,因此我必须从查询中的其他表JOIN
中检索它们。但是,我需要知道哪个FT\u T.IID
在FT\u T
中有两条记录(或大于一条)。也许您需要在加入和过滤之前计算计数:
SELECT . . .
FROM (SELECT F.*,
COUNT(*) OVER (PARTITION BY F.IID) as IID_CNT
FROM FT_T F
) JOIN
CEMEI_T MCI
ON F.IID = MCI.IID JOIN
EDE_T EDE
ON MCI.E_NUM = EDE.E_NUM JOIN
EDIE_T EDIE
ON EDIE.IID = F.IID AND EDIE.ET_ID = EDE.ET_ID
. . .
这只是一个注释/观察,但需要格式化
在(…)
中使用与选择distinct
和不在(…,…)
似乎很复杂,如果某些值为NULL,则可能会出现问题。我建议你考虑使用存在而不是存在。e、 g
AND EXISTS (
SELECT
NULL
FROM FT_T
WHERE F.IID = FT_T.IID
AND FT_T.GROUP_ID = 'BG'
AND FT_T.DEL_F = 'N'
AND NOT EXISTS (
SELECT
NULL
FROM CEMEI_T
WHERE FT_T.IID = CEMEI_T.IID
AND FT_T.E_NUM = CEMEI_T.E_NUM
AND CEMEI_T.TOS = 'BVVB'
AND CEMEI_T.EFF_END_DT IS NULL
)
)
您能提供一些示例数据和预期结果吗?这很有意义,但是,我刚刚意识到我的分区不仅应该超过F.IID
,而且应该是来自其他列的硬编码值,例如F.Type=“A”,因为可能有多行具有相同的<代码> F.IID < /代码>,但是我只应该考虑在我的窗口中使用“代码> f.Type =‘a’< /代码>的那些行。有没有办法在分区窗口中包含条件?嗯。。。也许把它放到分区窗口子查询的WHERE子句中!但我猜计数还是会超过所有的类型,不是吗?@nubradle。只能回答您提出的问题,而问题是关于计数F.IID
。