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

Откуда:
Сообщений: 50
 if object_id(N'tempdb..#temp', N'U') is not null drop table #temp
 select col1,col2 into #temp from (
 select 1 as col1,6 as col2 union all
 select 2,7 union all
 select 3,8)as t
 select * from #temp
 drop table #temp

col1        col2
----------- -----------
1           6
2           7
3           8

Как составить запрос, который выведет все записи, где col2 = 7 или все остальные записи, если col2 <> 7. Заранее значения столбца col2 не известны, в таблице сотни миллионов записей, поэтому два раза обращаться к ней не хочется.
29 июн 11, 12:30    [10892026]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи которые удовлетворяют условиям или вывести всё остальное  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
SABROG, не уверен в том, что вы выбрали правильный путь... Т.к. без полного скана таблицы врядли можно обойтись:
SELECT * FROM (
SELECT *,
SUM(CASE WHEN col2=7 THEN 1 ELSE 0 END) OVER () f
FROM #temp
) t
WHERE (t.col2=7 AND t.f>0) OR t.f=0
29 июн 11, 12:44    [10892156]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи которые удовлетворяют условиям или вывести всё остальное  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
...where col2 = @col2 or @col2 is null
29 июн 11, 13:22    [10892548]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи которые удовлетворяют условиям или вывести всё остальное  [new]
SABROG
Member

Откуда:
Сообщений: 50
kDnZP
SABROG, не уверен в том, что вы выбрали правильный путь... Т.к. без полного скана таблицы врядли можно обойтись:
SELECT * FROM (
SELECT *,
SUM(CASE WHEN col2=7 THEN 1 ELSE 0 END) OVER () f
FROM #temp
) t
WHERE (t.col2=7 AND t.f>0) OR t.f=0

Спасибо. Работает.

Knyazev Alexey
...where col2 = @col2 or @col2 is null

Такое не работает. Возвращается пустой результсет, если 7-ки нет, а должно выводится все что есть

declare @col2 int
 select @col2 = 7;
 with temp as (
 select 1 col1,6 col2
 union all
 select 2,9
 union all
 select 3,8
 union all
 select 4,10
 )
 select col1,col2 from temp where col2=@col2 or @col2 is null
29 июн 11, 13:34    [10892685]     Ответить | Цитировать Сообщить модератору
 Re: Вывести записи которые удовлетворяют условиям или вывести всё остальное  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
SELECT * FROM #temp  WHERE col2 = 7
UNION ALL
SELECT * FROM #temp  WHERE NOT EXISTS(SELECT * FROM #temp  WHERE col2 = 7);
Индекс по col2 не помешает.
29 июн 11, 13:36    [10892698]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить