oracle查询return重复数据
oracle query return duplicate data
我写了一个 oracle 查询来获取数据,它是 return 重复数据,所以我使用 distinct keyword.But 我得到一个错误:- ORA-01791: 不是 SELECTed 表达式
Oracle 查询:-
Select Distinct pi.first_name || ' ' || pi.last_name initiator
, pi.user_id
, c.country_name
, e.eform_name
, w.date_stamp_utc
, decode (
waRating.attr_value, 4, 'Very Positive',
3, 'Positive',
2, 'Neutral',
1, 'Negative',
0, 'Very Negative', '???'
) rating
, waEnv.attr_value environment
, nvl(ua.agent_name, '???') browser
, nvl(ua.agent_version, '???') version
, waFeedback.attr_value negative_feedback
From request_workflow w
Inner Join request_workflow_attribute waRating
On waRating.request_workflow_id = w.row_id
And waRating.attr_name = 'UserRating'
Inner Join request_workflow_attribute waEnv
On waEnv.request_workflow_id = w.row_id
And waEnv.attr_name = 'Environment'
Inner Join request_workflow_attribute waBrowser
On waBrowser.request_workflow_id = w.row_id
And waBrowser.attr_name = 'UserAgent'
Left Join request_workflow_attribute waFeedback
On waFeedback.request_workflow_id = w.row_id
And waFeedback.attr_name = 'UserFeedback'
Inner Join person_info pi
On w.performer_id = pi.row_id
Inner Join request_common rc
On w.request_id = rc.row_id
Inner Join eform e
On rc.eform_id = e.row_id
Left Join user_agent ua
On waBrowser.attr_value = ua.user_agent_raw
Inner Join country c
On pi.country_code = c.country_code
Where w.date_stamp_utc
Between '1-dec-2014' And '31-dec-2015'
Order By waRating.attr_value desc, eform_name;
请建议如何让它发挥作用。
使用group by
代替select distinct
:
select . . .
from . . .
where . . .
group by pi.first_name || ' ' || pi.last_name initiator
, pi.user_id
, c.country_name
, e.eform_name
, w.date_stamp_utc
, decode(waRating.attr_value, 4, 'Very Positive',
3, 'Positive',
2, 'Neutral',
1, 'Negative',
0, 'Very Negative', '???')
, waEnv.attr_value
, nvl(ua.agent_name, '???')
, nvl(ua.agent_version, '???')
, waFeedback.attr_value
order by waEnv.attr_value, eform_name;
错误信息是由您的order by 子句中的字段引起的。是
order by waRating.attr_value desc, eform_name
在您的 select 子句中,您有:
waEnv.attr_value environment
虽然字段名称相同,但它们来自不同的表。但是,这可能并不重要,因为您还在 select 子句中使用了别名。在您的 order by 子句中使用相同的子句:
order by environment desc, eform_name
我写了一个 oracle 查询来获取数据,它是 return 重复数据,所以我使用 distinct keyword.But 我得到一个错误:- ORA-01791: 不是 SELECTed 表达式
Oracle 查询:-
Select Distinct pi.first_name || ' ' || pi.last_name initiator
, pi.user_id
, c.country_name
, e.eform_name
, w.date_stamp_utc
, decode (
waRating.attr_value, 4, 'Very Positive',
3, 'Positive',
2, 'Neutral',
1, 'Negative',
0, 'Very Negative', '???'
) rating
, waEnv.attr_value environment
, nvl(ua.agent_name, '???') browser
, nvl(ua.agent_version, '???') version
, waFeedback.attr_value negative_feedback
From request_workflow w
Inner Join request_workflow_attribute waRating
On waRating.request_workflow_id = w.row_id
And waRating.attr_name = 'UserRating'
Inner Join request_workflow_attribute waEnv
On waEnv.request_workflow_id = w.row_id
And waEnv.attr_name = 'Environment'
Inner Join request_workflow_attribute waBrowser
On waBrowser.request_workflow_id = w.row_id
And waBrowser.attr_name = 'UserAgent'
Left Join request_workflow_attribute waFeedback
On waFeedback.request_workflow_id = w.row_id
And waFeedback.attr_name = 'UserFeedback'
Inner Join person_info pi
On w.performer_id = pi.row_id
Inner Join request_common rc
On w.request_id = rc.row_id
Inner Join eform e
On rc.eform_id = e.row_id
Left Join user_agent ua
On waBrowser.attr_value = ua.user_agent_raw
Inner Join country c
On pi.country_code = c.country_code
Where w.date_stamp_utc
Between '1-dec-2014' And '31-dec-2015'
Order By waRating.attr_value desc, eform_name;
请建议如何让它发挥作用。
使用group by
代替select distinct
:
select . . .
from . . .
where . . .
group by pi.first_name || ' ' || pi.last_name initiator
, pi.user_id
, c.country_name
, e.eform_name
, w.date_stamp_utc
, decode(waRating.attr_value, 4, 'Very Positive',
3, 'Positive',
2, 'Neutral',
1, 'Negative',
0, 'Very Negative', '???')
, waEnv.attr_value
, nvl(ua.agent_name, '???')
, nvl(ua.agent_version, '???')
, waFeedback.attr_value
order by waEnv.attr_value, eform_name;
错误信息是由您的order by 子句中的字段引起的。是
order by waRating.attr_value desc, eform_name
在您的 select 子句中,您有:
waEnv.attr_value environment
虽然字段名称相同,但它们来自不同的表。但是,这可能并不重要,因为您还在 select 子句中使用了别名。在您的 order by 子句中使用相同的子句:
order by environment desc, eform_name