【问题标题】:2 distinct columns, 6 total display columns, across 4 tables2 个不同的列,总共 6 个显示列,跨 4 个表
【发布时间】:2011-05-11 21:52:46
【问题描述】:

我正在尝试在 Oracle 中运行一个查询,我想在 2 列(positionat.task_number)上进行不同的选择,但总的来说我仍然想显示另外 4 列。

我知道 Oracle 只是在所有使用的列上使用 distinct,而不仅仅是 order 子句。如果我删除了 APP_GRPag.app_group_cd 的限定条件,那么我的查询会给出我想要的输出,但我还需要显示这些列。

这是我今天的选择的样子,但它并没有给我想要的东西。

select distinct
(select cv.display from code_value cv where cv.code_value = ag.position_cd) AS POSITION, AG.POSITION_CD,
(select cv.display from code_value cv where cv.code_value = ag.app_group_cd) AS APP_GRP, ag.app_group_cd, 
at.task_number, at.description, Users=count(ag.position_cd)
from
application_group ag, application_task at, task_access ta, code_value cv
plan cv
where cv.code_set= 78
and cv.active_ind = 1
and cv.begin_effective_dt_tm <= SYSDATE
and cv.end_effective_dt_tm >= SYSDATE
join ag
where ag.position_cd = cv.code_value
join ta
where ta.app_group_cd = ag.app_group_cd
join at
where at.task_number = ta.task_number
and at.task_number in (1, 2, 3, 4, 5, 6)
and at.active_ind = 1
join d
group by
ag.position_cd, ag.app_group_cd, at.task_number, at.description
having
COUNT(ag.position_cd)>0
order by position, at.task_number



更新

我的查询返回类似这样的内容...

位置-----APP_GRP-----TASK_NUMBER
zzzDBA-------------DBA----------------------1
zzzDBA-------------DBA---------------------4
zzzDBA-------------DBA-------------------------3
zzzDBA-------------DBA----------------------5
zzzDBA-------------DBA-------------------------2
zzzDBA-------------DBA--------3
zzzDBA-------------DBA--------4
zzzDBA-------------DBA--------5

最终我想到达我只返回的地方:

位置-----APP_GRP-----TASK_NUMBER
zzzDBA-------------DBA----------------------1
zzzDBA-------------DBA---------------------4
zzzDBA-------------DBA-------------------------3
zzzDBA-------------DBA----------------------5
zzzDBA-------------DBA-------------------------2
“删除” TASK_NUMBER IN (3, 4 5) 的 dup 行

【问题讨论】:

    标签: sql oracle distinct


    【解决方案1】:

    如果您没有获得这两个字段的不同值,则意味着您在 APP_GRPag.app_group_cd 字段中返回了多个值。

    如果您将 MAX() 之类的内容应用于这些字段并从 GROUP BY 语句中删除 ag.app_group_cd,您可能会得到不同的值,但您实际上隐藏了这样一个事实,即组合会为 APP_GRPag.app_group_cd.

    如果这没有意义,则可以更轻松地查看示例查询结果,了解您希望看到的内容以及查询返回的内容。

    【讨论】:

    • 我在原始帖子中添加了评论以帮助保留一些格式
    • 它与您的问题无关 - 该示例数据仅显示两个不同的字段。是选择的其他字段导致重复,不是吗?
    【解决方案2】:

    这个查询似乎可以解决问题...

    SELECT      tn.Position,
    tn.Task_Number,
    tn.TotalPosCd,
    maxapp.MaxAppGroupCD,
    ta.Description,
    appgrp.display AS APP_GRP
    
    FROM
            (SELECT     cv.display AS Position,
                        at.Task_Number,
                        COUNT(ag.position_code) AS TotalPosCd
            FROM  APPLICATION_TASK AT ,
                        TASK_ACCESS TA ,
                        APPLICATION_GROUP AG ,
                        CODE_VALUE CV
            WHERE AG.POSITION_CD  =    CV.CODE_VALUE 
                        AND TA.APP_GROUP_CD = AG.APP_GROUP_CD 
                        AND AT.TASK_NUMBER =  TA.TASK_NUMBER 
                        AND CV.CODE_SET =  88
                        AND CV.ACTIVE_IND =  1
                        AND CV.BEGIN_EFFECTIVE_DT_TM <= SYSDATE
                        AND CV.END_EFFECTIVE_DT_TM >=  SYSDATE
                        AND AT.TASK_NUMBER IN (1,2,3,4,5,6)
                        AND AT.ACTIVE_IND = 1 
            GROUP BY    cv.display,
                              at.Task_Number
            HAVING      COUNT(ag.Position_code) > 0
            ) tn,
            (SELECT ta.Task_Number,
                        MAX(ag.App_Group_CD) AS MaxAppGroupCD
            FROM  TASK_ACCESS ta,
                        APPLICATION_TASK at,
                        APPLICATION_GROUP ag
            WHERE tn.Task_number = ta.Task_number
                        AND ta.Task_Number = at.Task_number
                        AND ta.App_Group_CD = ag.App_Group_CD
            GROUP BY ta.Task_number
            ) maxapp,
            TASK_ACCESS ta,
            CODE_VALUE appgrp
    
    WHERE tn.Task_number = maxapp.Task_Number
            AND maxapp.MaxAppGroupCD = ta.app_group_cd
            AND tn.Task_Number = ta.Task_Number
            AND maxapp.MaxAppGroupCD = appgrp.Code_Value
    

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2021-10-27
      • 2020-07-01
      • 1970-01-01
      相关资源
      最近更新 更多