Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в одном SELECT сделать? / 7 сообщений из 7, страница 1 из 1
15.12.2020, 17:34
    #40028079
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном SELECT сделать?
Читаю значения переменных из таблицы кажду своим селектом, как одним селектом сделать?
(типа последнего, но он дает ошибку)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare @x table(val nvarchar(12), typ int)
declare @flag1 int=0
declare @flag2 int=0
insert into @x (val,typ) select N'11', 1 union select N'22', 2 union select N'33', 3 

select * from @x

select @flag1=cast(val as int) from @x where typ=1;
select @flag2=isnull(cast(val as int),101) from @x where typ=2;

select @flag1,@flag2

-- ?
select case typ when 1 then @flag1=isnull(cast(val as int),101) when 2 then @flag2=isnull(cast(val as int),202) end from @x
...
Рейтинг: 0 / 0
15.12.2020, 17:40
    #40028081
PaulYoung
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном SELECT сделать?
Ролг Хупин,

Код: sql
1.
2.
3.
4.
select
  @flag1 = max(case typ when 1 then isnull(cast(val as int),101) end),
  @flag2 = max(case typ when 2 then isnull(cast(val as int),202) end)
from @x

?
...
Рейтинг: 0 / 0
15.12.2020, 17:45
    #40028085
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном SELECT сделать?
Ролг Хупин
(типа последнего, но он дает ошибку)
Айайай, уж синтаксис case надо бы знать...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare @x table(val nvarchar(12), typ int)
declare @flag1 int=0
declare @flag2 int=0
insert into @x (val,typ) select N'11', 1 union select N'22', 2 union select N'33', 3 

select * from @x

select @flag1=cast(val as int) from @x where typ=1;
select @flag2=isnull(cast(val as int),101) from @x where typ=2;

select @flag1,@flag2

-- ?
set @flag1 = 0 set @flag2 = 0

--	шаманство
select @flag1 = case when typ = 1 then isnull(cast(val as int),101) else @flag1 end,
	   @flag2 = case when typ = 2 then isnull(cast(val as int),202) else @flag2 end
from @x

select @flag1,@flag2

set @flag1 = 0 set @flag2 = 0

--	правильный способ
select @flag1 = max(flag1),
	   @flag2 = max(flag2)
from (
	select flag1 = case when typ = 1 then isnull(cast(val as int),101) else null end,
		   flag2 = case when typ = 2 then isnull(cast(val as int),202) else null end
	from @x
) x

select @flag1,@flag2
...
Рейтинг: 0 / 0
15.12.2020, 18:03
    #40028093
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном SELECT сделать?
Ну, всё, всё
...
Рейтинг: 0 / 0
16.12.2020, 10:19
    #40028239
FantomGood
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном SELECT сделать?
еще один вариант
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
declare @x table(val nvarchar(12), typ int)
declare @flag1 int=0
declare @flag2 int=0
insert into @x (val,typ) select N'11', 1 union select N'22', 2 union select N'33', 3 

select * from @x

select @flag1=cast(val as int) from @x where typ=1;
select @flag2=isnull(cast(val as int),101) from @x where typ=2;

select @flag1,@flag2

-- ?
set @flag1 = 0 set @flag2 = 0
-- еще вариант
SELECT    
 @flag1 = isnull(cast([1] as int),101), @flag2 = isnull(cast([2] as int),202)
FROM  
(SELECT val, typ   
    FROM @x) AS SourceTable  
PIVOT  
(  
max(val)  
FOR typ IN ( [1], [2])  
) AS PivotTable;  

select @flag1,@flag2
...
Рейтинг: 0 / 0
16.12.2020, 10:42
    #40028250
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном SELECT сделать?
Без шаманства, агрегирования и прочего
Код: sql
1.
2.
3.
4.
5.
select
 @flag1 = isnull(cast(a.val as int), 101), @flag2 = isnull(cast(b.val as int), 202)
from
 (select top (1) val from @x where typ = 1) a full join
 (select top (1) val from @x where typ = 2) b on 1 = 1;
...
Рейтинг: 0 / 0
16.12.2020, 12:36
    #40028293
FantomGood
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в одном SELECT сделать?
это тоже один запрос )
Код: sql
1.
2.
select @flag1 = (select cast(val as int) from @x where typ=1)
,@flag2 = (select isnull(cast(val as int),101) from @x where typ=2)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в одном SELECT сделать? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]