Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос-запрос  [new]
Стас 44444
Member

Откуда:
Сообщений: 10
Есть таблица

create table t (a char, b char, c int);

insert t
select 'a', null, 1 union all
select 'a', null, 2 union all
select 'a', 'a', 2 union all
select 'a', 'c', 3 union all
select 'k', null, 2 ;

SELECT * FROM t;

как выбрать из неё данные таким образом, чтобы не выводить те строки, где значения колоноки a=b, т.е. врезультате должны остаться 3 строки.

-----Запрос типа
SELECT * FROM t
WHERE c not in (select c from t where a=b); ---удаляет 3 строки, что не верно
31 окт 09, 15:13    [7866546]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3197
select *
from t
where nullif(b, a) is null;
Только учтите, что в этой функции порядок аргументов имеет решающее значение.
31 окт 09, 15:22    [7866559]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
Стас 44444
Member

Откуда:
Сообщений: 10
не совсем то...

в результате должны остаться записи
select 'a', null, 1 union all
select 'a', 'c', 3 union all
select 'k', null, 2 ;
31 окт 09, 15:36    [7866573]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
может так?
Guest
select a, b, min(c) c
from t
where nullif(isnull(b,''), isnull(a,'')) is not null
group by a, b
a    b    c           
---- ---- ----------- 
a    NULL 1
k    NULL 2
a    c    3

(3 row(s) affected)
31 окт 09, 16:20    [7866611]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Стас 44444
не совсем то...

в результате должны остаться записи
select 'a', null, 1 union all
select 'a', 'c', 3 union all
select 'k', null, 2 ;
А куда же делась строка a='a', b=null, c=2 ?
31 окт 09, 16:26    [7866621]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
jekaSQL
Member

Откуда: Бабруйск
Сообщений: 596
Для приведенных данных проще некуда
SELECT * FROM t where a != ISNULL(b,'')
31 окт 09, 16:37    [7866638]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
jekaSQL
Для приведенных данных проще некуда
SELECT * FROM t where a != ISNULL(b,'')
Тогда у Вас тот же вопрос к Стасу, что и у меня.
31 окт 09, 17:10    [7866672]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
Стас 44444
Member

Откуда:
Сообщений: 10
jekaSQL
Для приведенных данных проще некуда
SELECT * FROM t where a != ISNULL(b,'')

Стас 44444
не совсем то...

в результате должны остаться записи

select 'a', null, 1 union all
select 'a', 'c', 3 union all
select 'k', null, 2 ;


jekaSQL



select a, b, min(c) c
from t
where nullif(isnull(b,''), isnull(a,'')) is not null
group by a, b

a b c
---- ---- -----------
a NULL 1
k NULL 2
a c 3

(3 row(s) affected)
[/src]


Для данного случая = ДА, НО числа могут быть любые, не обязательно в группе должно быть минимальное, понимаете?
31 окт 09, 17:10    [7866673]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
_
Guest
Стас 44444
...
Для данного случая = ДА, НО числа могут быть любые, не обязательно в группе должно быть минимальное, понимаете?


а вы понимаете,
что "минимальное число" - входит в множество "любых чисел"??
31 окт 09, 17:43    [7866707]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
-=DiM@n=-
Member

Откуда: Москва
Сообщений: 1564
SELECT * FROM t where ISNULL(a, '') != ISNULL(b,'')
31 окт 09, 17:45    [7866709]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
-=DiM@n=-
SELECT * FROM t where ISNULL(a, '') != ISNULL(b,'')
Надо три строки, а не четыре
31 окт 09, 17:48    [7866711]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
aleks2
Guest
iap
-=DiM@n=-
SELECT * FROM t where ISNULL(a, '') != ISNULL(b,'')
Надо три строки, а не четыре


Ну ето тредстартер лоханулся
"не выводить те строки, где значения колоноки a=b"
declare @t table(a char, b char, c int);

insert @t
select 'a', null, 1 union all
select 'a', null, 2 union all
select 'a', 'a', 2 union all
select 'a', 'c', 3 union all
select 'k', null, 2 ;

-- колбасим
declare @tt table(a char, b char, c int);

insert @tt
SELECT * FROM @t;

delete @tt
WHERE (a=b);

SELECT * FROM @tt;
31 окт 09, 17:58    [7866722]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
aleks2
iap
-=DiM@n=-
SELECT * FROM t where ISNULL(a, '') != ISNULL(b,'')
Надо три строки, а не четыре


Ну ето тредстартер лоханулся
"не выводить те строки, где значения колоноки a=b"
declare @t table(a char, b char, c int);

insert @t
select 'a', null, 1 union all
select 'a', null, 2 union all
select 'a', 'a', 2 union all
select 'a', 'c', 3 union all
select 'k', null, 2 ;

-- колбасим
declare @tt table(a char, b char, c int);

insert @tt
SELECT * FROM @t;

delete @tt
WHERE (a=b);

SELECT * FROM @tt;
Дык, если на самом деле годится 4, то я тоже давно уже могу ещё накидать:
select *
from t
where exists(select a except select b);
select *
from t
where a is not null and b is null or a is null and b is not null or a<>b;
31 окт 09, 18:12    [7866736]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
Стас 44444
Member

Откуда:
Сообщений: 10
Ладно, спасибо, разберусь сам
31 окт 09, 18:17    [7866742]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос-запрос  [new]
aleks2
Guest
iap
Дык, если на самом деле годится 4, то я тоже давно уже могу ещё накидать:
select *
from t
where exists(select a except select b);
select *
from t
where a is not null and b is null or a is null and b is not null or a<>b;


Это для тредстартера шибко сложно будет, проще надо быть

SELECT T.* 
FROM @t T LEFT OUTER JOIN (select * FROM @t WHERE a=b) TT
ON T.a=TT.a AND T.b=TT.b
WHERE TT.a is null
1 ноя 09, 12:13    [7867526]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить