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

Откуда:
Сообщений: 8
Добрый вечер!
есть таблица например:
"120м" "дом"
"150м" "дом"
"100м" "квартира"
"200м" "квартира"

мне нужно одним запросом выбрать дом и квартиру большую по метражу.
Чтобы получилось "150м" "дом" и "200м" "квартира"

Подскажите новичку.
4 сен 13, 18:35    [14795918]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
ЧТо то типа
declare @t as table ([metr] float, [type] varchar(50));

insert into @t select 120, 'дом'
insert into @t select 150, 'дом'
insert into @t select 100, 'квартира'
insert into @t select 200, 'квартира'

select distinct t1.[type], MAX(t2.[metr]) from @t t1 inner join @t t2 on t1.[type] = t2.[type]
group by t1.[type]
4 сен 13, 18:53    [14795989]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
distinct - лишний. Остался от промежуточного запроса
4 сен 13, 18:54    [14795994]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
KillaJ
Member

Откуда:
Сообщений: 8
Немного, не то вроде.

Мне надо не создать таблицу ,а из верхней таблоицы просто сделать выборку по запросу
4 сен 13, 19:04    [14796021]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
SQL2008
ЧТо то типа
declare @t as table ([metr] float, [type] varchar(50));

insert into @t select 120, 'дом'
insert into @t select 150, 'дом'
insert into @t select 100, 'квартира'
insert into @t select 200, 'квартира'

select distinct t1.[type], MAX(t2.[metr]) from @t t1 inner join @t t2 on t1.[type] = t2.[type]
group by t1.[type]
Для на фига INNER JOIN?
SELECT MAX(metr), [type]
FROM   @t
GROUP BY
       [type]
ORDER BY
       [type] DESC
4 сен 13, 19:17    [14796049]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
KillaJ
Member

Откуда:
Сообщений: 8
Declare @secBoardID as nvarchar(50)

SET @secBoardID = 'EQBS';

SELECT MAX(secUID)
,[UpdateDate]
,[secID]
,[secDisplayName]
,[secBoardID]

From [sidewinder].[dbo].[securities]
where [secBoardID] = @secBoardID
ORDER BY [secID]

На MAX ругается!!! Что не так сделал?
4 сен 13, 19:20    [14796058]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
KillaJ
Немного, не то вроде.

Мне надо не создать таблицу ,а из верхней таблоицы просто сделать выборку по запросу

Блин! Неужели непонятно, что таблица просто для проверки?
4 сен 13, 19:37    [14796107]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
skyANA
Для на фига INNER JOIN?
SELECT MAX(metr), [type]
FROM   @t
GROUP BY
       [type]
ORDER BY
       [type] DESC

Вы правы, уважаемый!
4 сен 13, 19:40    [14796116]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
KillaJ
Declare @secBoardID as nvarchar(50)

SET @secBoardID = 'EQBS';

SELECT MAX(secUID)
,[UpdateDate]
,[secID]
,[secDisplayName]
,[secBoardID]

From [sidewinder].[dbo].[securities]
where [secBoardID] = @secBoardID
ORDER BY [secID]

На MAX ругается!!! Что не так сделал?

Нужно сгруппировать по полям, которые не агрегируются.
4 сен 13, 19:41    [14796120]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
KillaJ
Member

Откуда:
Сообщений: 8
Понял.
Только вот не получается в запрос МАХ запихнуть

Declare @secBoardID as nvarchar(50)

SET @secBoardID = 'EQBS';

SELECT MAX(secUID)
,[UpdateDate]
,[secID]
,[secDisplayName]
,[secBoardID]

From [sidewinder].[dbo].[securities]
where [secBoardID] = @secBoardID
ORDER BY [secID]

пишет ошибку
4 сен 13, 19:42    [14796122]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
KillaJ
Member

Откуда:
Сообщений: 8
SQL2008
Нужно сгруппировать по полям, которые не агрегируются.


То есть групировать по полям, которых нет в селекте? Так делал - все равно ошибка
4 сен 13, 19:46    [14796133]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
KillaJ
Member

Откуда:
Сообщений: 8
Не понимаю как сгрупировать. Подскажите, пожалуйста!
4 сен 13, 19:53    [14796144]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Declare @secBoardID as nvarchar(50)

SET @secBoardID = 'EQBS';

SELECT MAX(secUID)
,[UpdateDate]
,[secID]
,[secDisplayName]
,[secBoardID]

From [sidewinder].[dbo].[securities]
where [secBoardID] = @secBoardID

GROUP BY [UpdateDate]
,[secID]
,[secDisplayName]
,[secBoardID]
4 сен 13, 19:53    [14796148]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
KillaJ
Member

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

Понял. Спасибо.
А можно сделать чтобы в выборке были только максимальные значения, а остальные исключались, как я писал в самом начале?

есть таблица например:
"120м" "дом"
"150м" "дом"
"100м" "квартира"
"200м" "квартира"


Чтобы получилось "150м" "дом" и "200м" "квартира"
4 сен 13, 20:05    [14796180]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Declare @secBoardID as nvarchar(50)

SET @secBoardID = 'EQBS';

select top (1) with ties
 secUID
,[UpdateDate]
,[secID]
,[secDisplayName]
,[secBoardID]

From [sidewinder].[dbo].[securities]
where [secBoardID] = @secBoardID
order by
 row_number() over (partition by [secID] order by secUID desc);
Предложение over (...) допилите как нужно.
4 сен 13, 20:29    [14796210]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31962
Какой ещё
skyANA
SQL2008
ЧТо то типа
declare @t as table ([metr] float, [type] varchar(50));

insert into @t select 120, 'дом'
insert into @t select 150, 'дом'
insert into @t select 100, 'квартира'
insert into @t select 200, 'квартира'

select distinct t1.[type], MAX(t2.[metr]) from @t t1 inner join @t t2 on t1.[type] = t2.[type]
group by t1.[type]

Для на фига INNER JOIN?
SELECT MAX(metr), [type]
FROM   @t
GROUP BY
       [type]
ORDER BY
       [type] DESC
По моему, вы оба упустили, что metr - это строка :-)
4 сен 13, 20:55    [14796245]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
KillaJ
Member

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

То что нужно, большое спасибо.
А такую конструкцию можно применить для update?
4 сен 13, 21:21    [14796295]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
KillaJ
А такую конструкцию можно применить для update?
В теории - можно, на практике - зависит от запроса.
4 сен 13, 21:29    [14796308]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, пожалуйста, запрос  [new]
Гость333
Member

Откуда:
Сообщений: 3683
alexeyvg
По моему, вы оба упустили, что metr - это строка :-)

Тому, кто проектировал таблицу, дать линейкой по рукам.
Тип столбца переделать в числовой.
Если, кроме квадратных метров, площадь может храниться в квадратных футах и прочем, — добавить столбец "Единица измерения".
5 сен 13, 08:29    [14797127]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить