2 отдельных столбца, 6 отображаемых столбцов в 4 таблицах - PullRequest
0 голосов
/ 12 мая 2011

Я пытаюсь выполнить запрос в Oracle, где я хочу сделать отдельный выбор по 2 столбцам (position, at.task_number), но в целом я все еще хочу отобразить дополнительные 4 столбца.

Я понимаю, что Oracle все равно использует разные для всех используемых столбцов, а не просто предложение порядка.Если я уберу квалификации APP_GRP и ag.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)

Ответы [ 2 ]

0 голосов
/ 12 мая 2011

Этот запрос, похоже, добился цели ...

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
0 голосов
/ 12 мая 2011

Если вы не получаете разные значения для этих двух полей, это означает, что у вас есть несколько значений, возвращаемых в полях APP_GRP и ag.app_group_cd.

Если вы примените что-то вроде MAX () к этим полям и удалите ag.app_group_cd из вашего оператора GROUP BY, вы, вероятно, получите разные значения, но вы по сути скрываете тот факт, что комбинация дает несколько значений для APP_GRP и ag.app_group_cd.

Если это не имеет смысла, было бы проще увидеть примеры результатов запроса для того, что вы ожидаете увидеть и что возвращает ваш запрос.

...