2015-09-22 4 views
-1

Это мой SQL запрос, чтобы получить результат от ORACLE DBУдалить повторяющиеся строки из SQL результатов

SELECT U."UID", 
CONCAT(CONCAT(U.LNAME, ', '), U.FNAME) AS UNAME, 
M.NAME, 
(SELECT COUNT(LH."UID") FROM DRUPAL_SYS.LOGIN_HISTORY LH WHERE LH."UID"=U."UID") AS VIEWS_COUNT, 
L.LOGIN as "ACCESS" FROM DRUPAL_SYS.USERS U INNER JOIN DRUPAL_SYS.LOGIN_HISTORY L ON L."UID" = U."UID" 
INNER JOIN ABC_WEBAPP.MEMBER_USER_ROLE MUR ON MUR.USER_ID=U.MDES_ID AND MUR.MEMBER_ID LIKE '%' 
INNER JOIN ABC_WEBAPP.MEMBER M ON M.ID=MUR.MEMBER_ID WHERE U.LOGIN != 0 AND U."UID">1 ORDER BY L."LOGIN" ASC` 

Его дает результат с дубликатом names

enter image description here

Но мой ожидаемый результат должен быть как

enter image description here

+0

Просто группа ваш результат. – Tjasun

ответ

0
SELECT U."UID", 
CONCAT(CONCAT(U.LNAME, ', '), U.FNAME) AS UNAME, 
M.NAME, 
(SELECT COUNT(LH."UID") FROM DRUPAL_SYS.LOGIN_HISTORY LH WHERE LH."UID"=U."UID") AS VIEWS_COUNT, 
MAX(L.LOGIN) as "ACCESS" FROM DRUPAL_SYS.USERS U 
INNER JOIN DRUPAL_SYS.LOGIN_HISTORY L ON L."UID" = U."UID" 
INNER JOIN ABC_WEBAPP.MEMBER_USER_ROLE MUR ON MUR.USER_ID=U.MDES_ID AND MUR.MEMBER_ID LIKE '%' 
INNER JOIN ABC_WEBAPP.MEMBER M ON M.ID=MUR.MEMBER_ID WHERE U.LOGIN != 0 AND U."UID">1 
ORDER BY L."LOGIN" ASC` 
GROUP BY UNAME, MNAME 

изменил L.LOGIN к MAX(L.LOGIN) и добавил GROUP BY пункт

0
SELECT U."UID", 
CONCAT(CONCAT(U.LNAME, ', '), U.FNAME) AS UNAME, 
M.NAME, 
(SELECT COUNT(LH."UID") FROM DRUPAL_SYS.LOGIN_HISTORY LH WHERE LH."UID"=U."UID") AS VIEWS_COUNT, 
L.LOGIN as "ACCESS" FROM DRUPAL_SYS.USERS U INNER JOIN DRUPAL_SYS.LOGIN_HISTORY L ON L."UID" = U."UID" 
INNER JOIN ABC_WEBAPP.MEMBER_USER_ROLE MUR ON MUR.USER_ID=U.MDES_ID AND MUR.MEMBER_ID LIKE '%' 
INNER JOIN ABC_WEBAPP.MEMBER M ON M.ID=MUR.MEMBER_ID WHERE U.LOGIN != 0 AND U."UID">1 GROUP BY UNAME ORDER BY L."LOGIN" ASC` 
+0

ORA-00904: «UNAME»: неверный идентификатор – drup

+0

изменить его на U.LNAME, U.FNAME – user3040610

+0

Пробовал. Но получение ORA-00979: не выражение GROUP BY. – drup

0

Для того, чтобы получить один результирующий ряд за UID и UNAME, вы группу этих полей.

GROUP BY UID, UNAME 

Затем для всех остальных полей решайте, какое значение следует показывать. Например. у вас есть четыре записи для «2689 kaila, piyush», какое имя вы хотите показать? Первый? Последний? Максимум? ... То же самое для просмотров просмотров; максимум? Сумма? И снова тот же вопрос для столбца доступа.

Пример:

select uid, uname, max(name), max(views_count), max(access) 
from (<your query here>) query 
group by uid, uname; 

Копирование и вставка (ORDER BY пункта удалены):

select uid, uname, max(name), max(views_count), max(access) 
from 
(
    SELECT U."UID", 
    CONCAT(CONCAT(U.LNAME, ', '), U.FNAME) AS UNAME, 
    M.NAME, 
    (SELECT COUNT(LH."UID") FROM DRUPAL_SYS.LOGIN_HISTORY LH WHERE LH."UID"=U."UID") AS VIEWS_COUNT, 
    L.LOGIN as "ACCESS" FROM DRUPAL_SYS.USERS U INNER JOIN DRUPAL_SYS.LOGIN_HISTORY L ON L."UID" = U."UID" 
    INNER JOIN ABC_WEBAPP.MEMBER_USER_ROLE MUR ON MUR.USER_ID=U.MDES_ID AND MUR.MEMBER_ID LIKE '%' 
    INNER JOIN ABC_WEBAPP.MEMBER M ON M.ID=MUR.MEMBER_ID WHERE U.LOGIN != 0 AND U."UID">1 
) query 
group by uid, uname; 
+0

Вы можете поделиться обновленным запросом. – drup

+0

Готово. Однако это всего лишь пример. * Вы * должны решить, какие значения должны отображаться для UID и UNAME. (И я уверен, что этот запрос можно было бы упростить.Он очень сильно зависит от того, какие значения будут показаны. Я просто показал способ использования текущего результата и получить от него одну строку на UID и UNAME.) –

+0

Спасибо Thorsten Kettner. но одна ошибка ORA-00936: отсутствует выражение 00936. 00000 - «Отсутствие выражения» Ошибка в строке: 1 Колонка: 53 – drup

Смежные вопросы