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

Откуда: C-Петербург
Сообщений: 954
есть запрос


select ut.partn, min(ut.period) as per from
(SELECT [1] AS partn, [2] AS qt, 1 AS period
FROM dbo.Stock2

UNION
SELECT [1] AS partn, [2] AS qt, 3 AS period
FROM dbo.Stock1

UNION select partn, qt, 0 as period
FROM dbo.Stock0) as ut
group by partn

Все отлично, но надо к результату добавить значение в поле qt
То есть надо быбрать запись целиком, там где минимальный период
который в данном случае константа для каждой таблицы

Испытываю затруднения... пробовал так

select ut.partn, ut.period ut.qt as per from
(...)
Having min(ut.period) = ut.period

но так не работает, все равно выдает все строки.

Подскажите плиз...
14 сен 05, 11:58    [1876215]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
prustr
Member

Откуда: C-Петербург
Сообщений: 954
Все вопрос снимается сортировкой и top 1
14 сен 05, 12:17    [1876392]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
prustr
Member

Откуда: C-Петербург
Сообщений: 954
нет, рано радовался..
проблема в том, что фильтр по полю partn ставится в запросах, включающих результат данного в себя через объединение. В отсутствии whehe partn = 'что-либо' в конкретном запросе ничего не работает. Точнее top 1 просто возвращает первую после сортировки запись без фильтрации.
Следовательно опять надо возавращаться к агрегированию и вопрос остается открытым
14 сен 05, 13:16    [1876826]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Приведите структуру таблицы, пример данных её заполнения и пример того, что нужно получить.
14 сен 05, 13:25    [1876891]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
prustr
Member

Откуда: C-Петербург
Сообщений: 954
create table stock1
(
partn nvarchar(20),
qt int
)
go
create table stock2
(
partn nvarchar(20),
qt int
)
go
create table stock0
(
partn nvarchar(20),
qt int
)
go
insert into stock1 values('губка', 2)
insert into stock2 values('губка', 3)
insert into stock0 values('тарелка', 2)

go
create table price
(
partn nvarchar(20),
price int
)
go
insert into price values('губка', 100)
insert into price values('тарелка',200)
go

-- каждой таблицы сток сопостовима константа period
-- если я хочу получить состояние всех складов, то

select price.*, tt.qt, tt.period from price inner join
(select partn,qt, 1 as period from stock1
union
select partn,qt, 2 as period from stock2
union
select partn,qt, 0 as period from stock0
) as tt ON price.partn = tt.partn
where price.partn = 'губка'


--мне надо показать только те записи, где значение period минимально
--увы, пока парюсь

drop table stock1
drop table stock2
drop table stock0
drop table price
14 сен 05, 13:45    [1877021]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
Брюлик
Member

Откуда:
Сообщений: 690
Does it work for you?

select top 1 * from
(
select price.*, tt.qt, tt.period from price inner join
(select partn,qt, 1 as period from stock1
union
select partn,qt, 2 as period from stock2
union
select partn,qt, 0 as period from stock0
) as tt ON price.partn = tt.partn
where price.partn = 'губка'
) as d order by period asc
14 сен 05, 13:49    [1877050]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
prustr
--мне надо показать только те записи, где значение period минимально
--увы, пока парюсь

И всё же не понятно - чем так не подходит
select top 1 price.*, tt.qt, tt.period from price inner join
(select partn,qt, 1 as period from stock1
union 
select partn,qt, 2 as period from stock2
union
select partn,qt, 0 as period from stock0
) as tt ON price.partn = tt.partn
where price.partn = 'губка'
order by 3
partn                price       qt          period      
-------------------- ----------- ----------- ----------- 
губка                100         2           1

(1 row(s) affected)
14 сен 05, 13:53    [1877080]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
prustr
Member

Откуда: C-Петербург
Сообщений: 954
Это требует явного указания условия where.
как я уже выше написал, если мне надо получить такой результат для списка позиций условие where переносится в предложение ON охватывающего запроса и тогда top 1 не работает

то есть есть таблица
create table bascket
(
part nvarchar(20)
)

insert into bascket values('губка')
insert into bascket values('тарелка')

вот теперь надо получить выбоку по всем stock где period -минимален
для всех записей bascket
14 сен 05, 14:35    [1877365]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
Брюлик
Member

Откуда:
Сообщений: 690
SELECT * FROM Orders
WHERE OrderDate =(SELECT MIN(OrderDate)
FROM Orders O WHERE O.CustomerId=Orders.CustomerId)

Этот запрос генерирует раннюю дата заказа для каждого потребителя

Я надеюсь тебе идеа понятна.
14 сен 05, 14:41    [1877392]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
prustr
Member

Откуда: C-Петербург
Сообщений: 954
Брюлик

Я надеюсь тебе идеа понятна.


да конечно понятна идея :), но этот UNION в конкретном примере меня просто подкашивает... то есть дважды придется в плане юнион делать, сначала для извлечения минимального, потом для извлечения записи где он совпадает. И это как то сподвигает на поиски решений...
14 сен 05, 14:57    [1877484]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
Брюлик
Member

Откуда:
Сообщений: 690
Create view Myview
AS
---Here is your UNION
14 сен 05, 14:58    [1877492]     Ответить | Цитировать Сообщить модератору
 Re: как добавить к агрегиранным полям просто значение поля, если нет идентификатора строк  [new]
prustr
Member

Откуда: C-Петербург
Сообщений: 954
Все так заработало, синтаксис подправил по примеру, страдал синтаксис
14 сен 05, 15:22    [1877630]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить