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

Откуда:
Сообщений: 265
Подскажите, у меня есть запрос, и мне нужно сделать что когда нет записей выводить пусто

select ID, Name1, Name2, Status
from OZ
where ID = @ID
8 дек 16, 10:00    [19979070]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Pabl0, я сделал так, но не знаю на сколько это верно.



select ID, Name1, Name2, Status
from OZ
where ID = @ID

unian all

select ID, @ID, Name2, Status
from OZ
where ID <> @ID
8 дек 16, 10:02    [19979081]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
Pabl0
выводить пусто
пример вывода приведите, чтобы было понятно, что вам нужно
8 дек 16, 10:04    [19979090]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Добрый Э - Эх
Guest
Pabl0,

если ID в таблице уникально, то как вариант:
select max(ID) as ID, max(Name1) as Name1, max(Name2) as Nam2, max(Status) as Status
from OZ
where ID = @ID
8 дек 16, 10:07    [19979103]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Pabl0
Member

Откуда:
Сообщений: 265
select ID, UserID, Name, Status
from OZ
where UserID = @UserID


Вот такой пример понятнее

ID - да уникальный

Вывод должен выглядеть так

select ID или NULL, @UserID, NULL, NULL
8 дек 16, 10:10    [19979122]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Добрый Э - Эх,

Переписал задачу, там немного другое хочу, привязка не к ID, а UserID

Но ID уникальный
8 дек 16, 10:12    [19979130]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Pabl0,

вообще-то сервер не должен возвращать того, чего у него нет. Это называется "достоверность данных". Решайте свои проблемы с отображением на клиенте.
8 дек 16, 10:30    [19979228]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
Владислав Колосов
Pabl0,

вообще-то сервер не должен возвращать того, чего у него нет. Это называется "достоверность данных". Решайте свои проблемы с отображением на клиенте.


Если сделать запрос select 2 as a, 3 as b и на клиенте вычислить a*b, то получим ab=6.

Если сделать так select 2*3 as ab, то на клиенте будет ab=6.

Можно ли утверждать, что в первом случае мы имеем более достоверные данные? Да, так как произведения ab на сервере нет!
8 дек 16, 14:28    [19980534]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
Wlr-l
Если сделать запрос select 2 as a, 3 as b и на клиенте вычислить a*b, то получим ab=6.

Если сделать так select 2*3 as ab, то на клиенте будет ab=6.

Можно ли утверждать, что в первом случае мы имеем более достоверные данные? Да, так как произведения ab на сервере нет!

т.е. если я создам вьюху, то это будут "недостоверные" данные т.к. на сервере их "нет"?
8 дек 16, 14:35    [19980563]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
Дедушка,

Согласно утверждению Владислава Колосова это так.
8 дек 16, 14:41    [19980609]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Дык можно сделать что угодно, но тот, кто захочет найти в таблицах ваши "пустые" строки голову сломает и клавиатуру. Последствия решений бывают хорошими и плохими.
Задача разработчика СУБД состоит в обеспечении целостности, достоверности и непротиворечивости. Если он выполняет эти требования, то его база нареканий не вызовет ни у кого.
8 дек 16, 14:50    [19980684]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Jaffar
Member

Откуда:
Сообщений: 633
declare @ID int
---------------
set @ID = 132
---------------
--- Это поможет в случае не_уникальности.
--- общая идея заносить входные параметры в подзапрос.

select tp0.ID, t.Name1, t.Name2, t.Status
from (select @ID ID /**/ ) tp0
left join tmp_Table1 t with(nolock) on t.ID = tp0.ID
8 дек 16, 14:57    [19980725]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Wlr-l
Member

Откуда:
Сообщений: 599
Владислав Колосов,

Т.е. вычисление произведения на клиенте обеспечивает целостность, достоверность и непротиворечивость данных?

Чтобы не делать что угодно и не искать того, чего нет в таблицах, можно упростить синтаксис оператора выборки до такого:

select tableName;
8 дек 16, 15:02    [19980754]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Wlr-l,

я Вас ни в чем не убеждаю, к чему эти вопросы? Пишите, как хотите :) Но последствия тех или иных решений будут разными.
8 дек 16, 15:13    [19980819]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
buven
Member

Откуда:
Сообщений: 792
Владислав Колосов
Wlr-l,

Но последствия тех или иных решений будут разными.

Например такие:
create table #T (ID int,USERID char(2))
insert into #T select 1,'U1'
insert into #T select 2,'U1'
GO
with CTE (ID) as (
SELECT Result = NULLIF(COUNT(*),0) FROM #T where USERID='U2'

)
select ID,'U2' from CTE
GO
with CTE (ID) as (
SELECT Result = NULLIF(COUNT(*),0) FROM #T where USERID='U1'

)
select ID,'U1' from CTE
GO
drop table  #T
8 дек 16, 15:18    [19980841]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Pabl0
Pabl0, я сделал так, но не знаю на сколько это верно.



select ID, Name1, Name2, Status
from OZ
where ID = @ID

unian all

select ID, @ID, Name2, Status
from OZ
where ID <> @ID
Конечно, неверно. Хотя бы так:

SELECT ID, Name1, Name2, Status
FROM OZ
WHERE ID = @ID
UNION ALL
SELECT NULL, NULL, NULL, NULL
WHERE NOT EXISTS(SELECT * FROM OZ WHERE ID = @ID);
8 дек 16, 15:40    [19980964]     Ответить | Цитировать Сообщить модератору
 Re: Вывод данных если пусто  [new]
AmKad
Member

Откуда:
Сообщений: 5308
declare @id int = 2; -- 1

with oz as 
(select 1 id, 1 name1, 1 name2, 1 status
)
select id, name1, name2, status
from
   (select id, name1, name2, status,
    dense_rank() over (order by dr) dr
    from
       (select id, name1, name2, status, 0 dr
        from oz
        where id = @id
        union all
        select null, null, null, null, 1 dr
       ) t   
   ) t
where dr = 1;
8 дек 16, 15:59    [19981046]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить