powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в одном SELECT сделать?
7 сообщений из 7, страница 1 из 1
Как в одном SELECT сделать?
    #40028079
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю значения переменных из таблицы кажду своим селектом, как одним селектом сделать?
(типа последнего, но он дает ошибку)

Код: 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
Как в одном SELECT сделать?
    #40028081
Фотография PaulYoung
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Код: 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
Как в одном SELECT сделать?
    #40028085
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
(типа последнего, но он дает ошибку)
Айайай, уж синтаксис 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
Как в одном SELECT сделать?
    #40028093
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, всё, всё
...
Рейтинг: 0 / 0
Как в одном SELECT сделать?
    #40028239
FantomGood
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще один вариант
Код: 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
Как в одном SELECT сделать?
    #40028250
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без шаманства, агрегирования и прочего
Код: 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
Как в одном SELECT сделать?
    #40028293
FantomGood
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это тоже один запрос )
Код: 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
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в одном SELECT сделать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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