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

Откуда:
Сообщений: 148
первый вопрос, как создать временную таблицу, чтобы предварительно не объявлять количество и типы атрибутов?
типа просто загнать в неё селект, а потом с ним оперировать, аналог Proc SQL:

create table as select ...

второй вопрос, есть таблица

А int, B int, C string
1 2 asdfasdf
1 3 asd
1 4 adsasd
2 1 ads
2 2 adasd

нужно выбрать
1 4 adsasd
2 2 adasd

то есть выбрать для каждого A строчку, где B максимально
7 июн 12, 22:24    [12684589]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
RubinDm
Member

Откуда:
Сообщений: 461
Шпунтик
первый вопрос, как создать временную таблицу, чтобы предварительно не объявлять количество и типы атрибутов?
типа просто загнать в неё селект, а потом с ним оперировать, аналог Proc SQL:create table as select ...

select ...
into NewTableName
from SomeTableName

Шпунтик
второй вопрос, есть таблица
А int B int C string
12asdfasdf
13asd
14adsasd
21ads
22adasd

нужно выбрать
А int B int C string
14adsasd
22adasd
то есть выбрать для каждого A строчку, где B максимально

select T1.A, T2.B, T2.C
from T T1
cross apply
( select top 1 T.B, T.C
  from T T where T.A = T1.A
  order by T.B desc
) T2
7 июн 12, 22:34    [12684622]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Шпунтик,

1) select ... into #mytemptable from....
2) можно использовать подзапросы с группировкой или row_number() over(partition by ...), поищите по форуму, тут много примеров таких запросов.
7 июн 12, 22:34    [12684623]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Шпунтик
Member

Откуда:
Сообщений: 148
спасибо, мужики, а то я год уже не писал ничего)
7 июн 12, 22:36    [12684630]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Шпунтик
Member

Откуда:
Сообщений: 148
RubinDm
select T1.A, T2.B, T2.C
from T T1
cross apply
( select top 1 T.B, T.C
  from T T where T.A = T1.A
  order by T.B desc
) T2


чото не канает такое, те же строчки выводятся
7 июн 12, 22:50    [12684665]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
RubinDm
Member

Откуда:
Сообщений: 461
Шпунтик
чото не канает такое, те же строчки выводятся

те же - это какие же?
7 июн 12, 22:56    [12684676]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Шпунтик
Member

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

короче норм, надо было ещё where T2.B=T1.B накинуть
7 июн 12, 22:59    [12684682]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
step_ks
Member

Откуда:
Сообщений: 936
Who's On First? Solving the Top per Group Problem
8 июн 12, 08:09    [12685059]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Дмитрий_sql
Member

Откуда:
Сообщений: 35
Шпунтик
первый вопрос, как создать временную таблицу, чтобы предварительно не объявлять количество и типы атрибутов?
типа просто загнать в неё селект, а потом с ним оперировать, аналог Proc SQL:

create table as select ...


Пример с созданием таблицы в базе tempdb

 Select  a,b,c into #tab1 
         from  ... 


Пример с созданием таблицы в базе tempdb

 
create table #tab  (a int, b int, c varchar(500))

insert into #tab1 
Select  a,b,c 
from  ... 



Пример с созданием таблицы в памяти

 
declare @tab table (a int, b int, c varchar(500))

insert into @tab
Select  a,b,c 
from  ... 




Шпунтик
второй вопрос, есть таблица

А int, B int, C string
1 2 asdfasdf
1 3 asd
1 4 adsasd
2 1 ads
2 2 adasd

нужно выбрать
1 4 adsasd
2 2 adasd

то есть выбрать для каждого A строчку, где B максимально


А для какой версии SQL Server? Запросы сильно отличаются...
8 июн 12, 08:30    [12685111]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Дмитрий_sql
Пример с созданием таблицы в памяти

ну вообще-то в той же "базе tempdb "
8 июн 12, 08:55    [12685215]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Дмитрий_sql
Member

Откуда:
Сообщений: 35
Knyazev Alexey
Дмитрий_sql
Пример с созданием таблицы в памяти

ну вообще-то в той же "базе tempdb "



Где они отображаются?

declare @t1 table(id int,
priority int,
x1 real,
y1 real)

declare @t2 table(t1 int,
priority int,
id int,
x2 real,
y2 real)

select * from tempdb.sys.objects where type='u'
8 июн 12, 09:55    [12685548]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Дмитрий_sql
Где они отображаются?
set statistics io on;
select * from @t1;
И увидите где.
8 июн 12, 10:02    [12685591]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Дмитрий_sql
Member

Откуда:
Сообщений: 35
invm
Дмитрий_sql
Где они отображаются?
set statistics io on;
select * from @t1;
И увидите где.


Спасибо, был не прав.
8 июн 12, 10:06    [12685619]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Дмитрий_sql
Где они отображаются?
select * from tempdb.sys.objects where type='u'


select count(*) from tempdb.sys.objects
where type = 'U'
go
declare @t table(i int)
select count(*) from tempdb.sys.objects
where type = 'U'
go
8 июн 12, 10:13    [12685678]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (что-то я совсем забыл синтаксис (= )  [new]
KononovAI
Member

Откуда:
Сообщений: 148
Можно еще так:

T1 - Ваша таблица

select
  T1.*
from
  T1
  inner join (  select A, Max(B) B from T1 group by A ) Fltr on Fltr.A = T1.A and Fltr.B = T1.B 
8 июн 12, 10:41    [12685878]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить