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

Откуда:
Сообщений: 72
Дрогие форумцъ подскажите есть ли вариант сделать мой запрос через SELECT


у меня табличка вот примерно такая(в опрощенном варианте)
с колонками : ID, DATE, QUANTITY

и примерно вот такое заполнение
ID, DATE, QUANTITY
1;10.03.2004;10;
1;11.03.2004;1;
1;25.04.2004;0;
1;26.04.2004;1;
2;28.02.2003;1;
3;30.01.2002;0;
МНе нужно показать ети ID у которъх сумма QUANTITY за месяц положительна и у которъх такие месяцъ больше например > 1
так значит в етом случае
нужно показать
ID
1;
я пробовал с клонированием таблицъ, но никак не могу с count-ом справиться и нужном группированием
5 ноя 04, 09:54    [1085416]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
unicode
Member

Откуда:
Сообщений: 810
а как это понять

mikgeo

у которъх такие месяцъ больше например > 1

5 ноя 04, 10:08    [1085459]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
select id from mytab group by id having count(*)>1 and datediff(mm, min(date), max(date))>1


для спящего время бодрствования равносильно сну
5 ноя 04, 10:10    [1085463]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
unicode
Member

Откуда:
Сообщений: 810
[SRC]select id,count(datepart(mm,date)) from table1
group by id
having sum(quantity) > 0 
[/SRC]
5 ноя 04, 10:13    [1085475]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
mikgeo
Member

Откуда:
Сообщений: 72
Извините что написал непонятно
пд етим я имею ввиду что для одного ID может есть больше одного месяця для которъй сумма quantity положительня

например:
ID DATE QUANTITY
1 10.03.2004 1
2 5.07.2004 12
2 4.08.2004 13
2 5.08.2004 13

результат когда например месяцъ > 1 и сумма(quantity) для етих положительна
будет:
ID
2
5 ноя 04, 10:13    [1085476]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
mikgeo
Member

Откуда:
Сообщений: 72
ето последнее пока писал не знал что ответили уже :)
5 ноя 04, 10:14    [1085484]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
упс, наверна так
select id from mytab group by id having sum(quantity)>1 and datediff(dd, min(date), max(date))>=30


для спящего время бодрствования равносильно сну
5 ноя 04, 10:15    [1085485]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
unicode
Member

Откуда:
Сообщений: 810
Алексей2003


select id from mytab group by id having count(*)>1 and datediff(mm, min(date), max(date))>1 and sum(quantity)  > 0


5 ноя 04, 10:19    [1085503]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
mikgeo
Member

Откуда:
Сообщений: 72
СПАСИБО вам ВСЕМ
ГДЕ
Алексей
и
Юникоуд
И
всем другим конечно
5 ноя 04, 10:22    [1085521]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
Glory
Member

Откуда:
Сообщений: 104760
set dateformat dmy
go
declare @t table(i integer, d datetime, s int)

insert @t 
select 1, '10.03.2004', 1
union all select 2, '5.07.2004', 12
union all select 2, '4.08.2004', 13
union all select 2, '5.08.2004', 13
union all select 3, '6.08.2004', 12
union all select 3, '4.08.2004', 13
union all select 3, '5.08.2004', 13
union all select 4, '5.07.2004', -12
union all select 4, '4.08.2004', 13
union all select 4, '5.08.2004', 13

select i
from @t
group by i having count(distinct case when s > 0 then convert(char(6), d,112) else null end) > 1

/*неправильный результат*/
select i 
from @t 
group by i having sum(s)>1 and datediff(dd, min(d), max(d))>=30
5 ноя 04, 10:29    [1085543]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
mikgeo
Member

Откуда:
Сообщений: 72
другие что дают неправильнъй результат наверно?
5 ноя 04, 10:40    [1085583]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
Glory
Member

Откуда:
Сообщений: 104760
А совсем правильно по-моеум согласно условиям
"одного ID может есть больше одного месяця для которъй сумма quantity положительня"
"результат когда например месяцъ > 1 и сумма(quantity) для етих положительна"

будет

set dateformat dmy
go
declare @t table(i integer, d datetime, s int)

insert @t 
select 1, '10.03.2004', 1
union all select 2, '5.07.2004', 12
union all select 2, '4.08.2004', -15
union all select 2, '5.08.2004', 13
union all select 3, '6.08.2004', 12
union all select 3, '4.08.2004', 13
union all select 3, '5.08.2004', 13
union all select 4, '5.07.2004', -12
union all select 4, '4.08.2004', 13
union all select 4, '5.08.2004', 13

/*select i
from @t
group by i having count(distinct case when s > 0 then convert(char(6), d,112) else null end) > 1

select i from @t group by i having sum(s)>1 and datediff(dd, min(d), max(d))>=30
*/

select i
from(
select i, convert(char(6), d,112) as x, sum(s) as s
from @t
group by i, convert(char(6), d,112)
) as a
gr
5 ноя 04, 10:45    [1085605]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли ето сделать через SELECT?  [new]
mikgeo
Member

Откуда:
Сообщений: 72
Извините всем, что я не умею писать хорошо по русски
и наверно придурил с неяснъми вопросами...
буду учится из ваших примеров
5 ноя 04, 12:33    [1086125]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить