отличный SQL - вернуть отдельные строки - PullRequest
0 голосов
/ 20 октября 2018

У меня есть таблица со следующими записями:

Column A   Column B

1           XX
2           XX
3           XX
4           XX

Как отобразить 1 запись , используя только ColumnB, но не используя ColumnA.Как я должен сказать

select from Table T where ColumnB ='XX'

и только 1 строка должна вернуться.

Ответы [ 5 ]

0 голосов
/ 29 октября 2018

Спасибо всем за идеи.

Я попробовал из нижеприведенного, и это сработало для меня,

выберите a.column_name FROM tale_name A WHERE ROWID IN (выберите RID FROM (SELECT ROWIDRID, ROW_NUMBER () OVER (PARTITION BY a.column_name ORDER BY ROWID) RN FROM table_name a где column_name в (выберите TO_CHAR (column_name) из diff_table_name)) WHERE RN = 1

0 голосов
/ 20 октября 2018

Если вам действительно все равно, какая из соответствующих записей возвращается, просто используйте псевдостолбец rownum:

select * from Table T where ColumnB ='XX' 
and rownum = 1;

Этот запрос просто возвращает первую строку из набора результатов.Это самый дешевый способ получить один ряд.Результат является недетерминированным, потому что нет порядка сортировки, и не может быть: rownum не подходит для ORDER BY, поэтому важно, чтобы вам было все равно, какая строка возвращается.

0 голосов
/ 20 октября 2018

Вы можете использовать один из следующих вариантов:

with t(colA,ColB) as
(  
 select 1,'XX' from dual union all
 select 2,'XX' from dual union all
 select 3,'XX' from dual union all
 select 4,'XX' from dual    
)
select ColB 
  from t
 where ColumnB = 'XX' and rownum = 1;

или

select ColB from
(
    with t(colA,ColB) as
    (  
     select 1,'XX' from dual union all
     select 2,'XX' from dual union all
     select 3,'XX' from dual union all
     select 4,'XX' from dual    
    )
    select ColB,
           row_number() over (order by ColB) as rn
      from t
)
where ColumnB = 'XX' and rn=1;

или, если ваша версия БД 12c, она также работает:

with t(colA,ColB) as
(  
 select 1,'XX' from dual union all
 select 2,'XX' from dual union all
 select 3,'XX' from dual union all
 select 4,'XX' from dual    
)
select ColB 
from t
where ColumnB ='XX'
fetch {first|next} 1 {row|rows} only;

предпочтительным является одно из ключевых слов first или next и row или rows.

0 голосов
/ 20 октября 2018

Так как вам на самом деле все равно, какой a вернуть, как насчет

SQL> with test (a, b) as
  2  (select 1, 'xx' from dual union all
  3   select 2, 'xx' from dual union all
  4   select 3, 'yy' from dual
  5  )
  6  select min(a) a, min(b) b
  7  from test
  8  where b = 'xx';

         A B
---------- --
         1 xx

SQL>
0 голосов
/ 20 октября 2018

Вы можете сделать это так

select from Table T where ColumnB ='XX' group by ColunmB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...