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

Откуда:
Сообщений: 503
Помогите пожалуйста с нестандартной задачей.
Если у человека (FIO) есть за какой-то день в (Percentage) > 0 то в отдельном поле по всем задачам за этот день (если нет этого дня то добавить) установить флаг

SET LANGUAGE Russian
if object_id('tempdb..#t', 'U') > 0 drop table #t
create table	#t (date	datetime,	task_id int, Theme  nvarchar(255), Hours float, FIO	nvarchar(128), Percentage int)
insert into #t

select '17.10.2011 0:00',33, N'Тема_2',7, N'Andrey',0 union all
select '18.10.2011 0:00',33, N'Тема_2',8, N'Andrey',0 union all
select '19.10.2011 0:00',33, N'Тема_2',8, N'Andrey',0 union all
select '20.10.2011 0:00',34, N'Тема_2',8, N'Andrey',0 union all
select '21.10.2011 0:00',34, N'Тема_2',8, N'Andrey',0 union all
select '18.10.2011 0:00',36, N'Тема_2',8, N'Igor',0 union all
select '19.10.2011 0:00',37, N'Тема_2',8, N'Igor',0 union all
select '20.10.2011 0:00',37, N'Тема_2',8, N'Igor',0 union all
select '21.10.2011 0:00',37, N'Тема_2',8, N'Igor',0 union all
select '17.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0 union all
select '18.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0 union all
select '19.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0 union all
select '20.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0 union all
select '21.10.2011 0:00',15, N'Тема_2',8, N'Ihor',0 union all
select '17.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67 union all
select '18.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67 union all
select '18.10.2011 0:00',22, N'Тема_2',null, N'Kate',null union all
select '18.10.2011 0:00',23, N'Тема_2',8, N'Kate',67 union all
select '19.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67 union all
select '19.10.2011 0:00',23, N'Тема_2',3.9, N'Kate',67 union all
select '20.10.2011 0:00',23, N'Тема_2',8, N'Kate',0 union all
select '21.10.2011 0:00',24, N'Тема_2',8, N'Kate',0 union all
select '17.10.2011 0:00',6, N'Тема_2',8, N'Sergey',0 union all
select '18.10.2011 0:00',7, N'Тема_2',8, N'Sergey',0 union all
select '19.10.2011 0:00',8, N'Тема_2',8, N'Sergey',0 union all
select '20.10.2011 0:00',9, N'Тема_2',8, N'Sergey',0 union all
select '21.10.2011 0:00',9, N'Тема_2',8, N'Sergey',0

select * from #t


Платформа sql 2000 sp3
27 янв 12, 13:47    [11982963]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
32sasha, и что не получается?
27 янв 12, 14:36    [11983571]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
32sasha
Member

Откуда:
Сообщений: 503
Что-то я не то делаю
select DISTINCT t1.date,  t1.task_id, t1.Theme, t1.Hours ,t1.FIO, 
case when isnull(t1.Percentage,0) > 0 then isnull(t1.Percentage,0) else isnull(t2.Percentage,0) end Percentage
from #t as t1, #t as t2 where t1.FIO = t2.FIO or t1.Percentage > 0
order by t1.FIO
27 янв 12, 16:06    [11984451]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
32sasha
Помогите пожалуйста с нестандартной задачей.
Если у человека (FIO) есть за какой-то день в (Percentage) > 0 то в отдельном поле по всем задачам за этот день (если нет этого дня то добавить) установить флаг

А покажи-те ожидаемый результат. Особенно интересует добавление дня.
27 янв 12, 16:14    [11984513]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
32sasha
Member

Откуда:
Сообщений: 503
Должен получиться такой результат. По примеру пересечение есть только у Kate
select '17.10.2011 0:00',33, N'Тема_2',7, N'Andrey',0,0 union all
select '18.10.2011 0:00',33, N'Тема_2',8, N'Andrey',0,0 union all
select '19.10.2011 0:00',33, N'Тема_2',8, N'Andrey',0,0 union all
select '20.10.2011 0:00',34, N'Тема_2',8, N'Andrey',0,0 union all
select '21.10.2011 0:00',34, N'Тема_2',8, N'Andrey',0,0 union all
select '18.10.2011 0:00',36, N'Тема_2',8, N'Igor',0,0 union all
select '19.10.2011 0:00',37, N'Тема_2',8, N'Igor',0,0 union all
select '20.10.2011 0:00',37, N'Тема_2',8, N'Igor',0,0 union all
select '21.10.2011 0:00',37, N'Тема_2',8, N'Igor',0,0 union all
select '17.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '18.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '19.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '20.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '21.10.2011 0:00',15, N'Тема_2',8, N'Ihor',0,0 union all

select '17.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67,1 union all
select '18.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67,1 union all
select '19.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67,1 union all
select '20.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',0,1 union all
select '21.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',0,1 union all

select '17.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all
select '18.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all
select '19.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all
select '20.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all
select '21.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all

select '17.10.2011 0:00',23, N'Тема_2',null, N'Kate',0,1 union all
select '18.10.2011 0:00',23, N'Тема_2',8, N'Kate',67,1 union all
select '19.10.2011 0:00',23, N'Тема_2',3.9, N'Kate',67,1 union all
select '20.10.2011 0:00',23, N'Тема_2',8, N'Kate',0,1 union all
select '21.10.2011 0:00',23, N'Тема_2',null, N'Kate',0,1 union all

select '17.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,1 union all
select '18.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,1 union all
select '19.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,1 union all
select '20.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,1 union all
select '21.10.2011 0:00',24, N'Тема_2',8, N'Kate',0,1 union all

select '17.10.2011 0:00',6, N'Тема_2',8, N'Sergey',0,0 union all
select '18.10.2011 0:00',7, N'Тема_2',8, N'Sergey',0,0 union all
select '19.10.2011 0:00',8, N'Тема_2',8, N'Sergey',0,0 union all
select '20.10.2011 0:00',9, N'Тема_2',8, N'Sergey',0,0 union all
select '21.10.2011 0:00',9, N'Тема_2',8, N'Sergey',0,0
27 янв 12, 16:43    [11984835]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
32sasha
Member

Откуда:
Сообщений: 503
Верхний результат не верный по 20 и 21 числу для Kate
Должен получиться такой результат. По примеру и условию пересечение есть только у Kate
select '17.10.2011 0:00',33, N'Тема_2',7, N'Andrey',0,0 union all
select '18.10.2011 0:00',33, N'Тема_2',8, N'Andrey',0,0 union all
select '19.10.2011 0:00',33, N'Тема_2',8, N'Andrey',0,0 union all
select '20.10.2011 0:00',34, N'Тема_2',8, N'Andrey',0,0 union all
select '21.10.2011 0:00',34, N'Тема_2',8, N'Andrey',0,0 union all
select '18.10.2011 0:00',36, N'Тема_2',8, N'Igor',0,0 union all
select '19.10.2011 0:00',37, N'Тема_2',8, N'Igor',0,0 union all
select '20.10.2011 0:00',37, N'Тема_2',8, N'Igor',0,0 union all
select '21.10.2011 0:00',37, N'Тема_2',8, N'Igor',0,0 union all
select '17.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '18.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '19.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '20.10.2011 0:00',14, N'Тема_2',8, N'Ihor',0,0 union all
select '21.10.2011 0:00',15, N'Тема_2',8, N'Ihor',0,0 union all

select '17.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67,1 union all
select '18.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67,1 union all
select '19.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67,1 union all
select '20.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',0,0 union all
select '21.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',0,0 union all

select '17.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all
select '18.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all
select '19.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,1 union all
select '20.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,0 union all
select '21.10.2011 0:00',22, N'Тема_2',null, N'Kate',null,0 union all

select '17.10.2011 0:00',23, N'Тема_2',null, N'Kate',0,1 union all
select '18.10.2011 0:00',23, N'Тема_2',8, N'Kate',67,1 union all
select '19.10.2011 0:00',23, N'Тема_2',3.9, N'Kate',67,1 union all
select '20.10.2011 0:00',23, N'Тема_2',8, N'Kate',0,0 union all
select '21.10.2011 0:00',23, N'Тема_2',null, N'Kate',0,0 union all

select '17.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,1 union all
select '18.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,1 union all
select '19.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,1 union all
select '20.10.2011 0:00',24, N'Тема_2',null, N'Kate',0,0 union all
select '21.10.2011 0:00',24, N'Тема_2',8, N'Kate',0,0 union all

select '17.10.2011 0:00',6, N'Тема_2',8, N'Sergey',0,0 union all
select '18.10.2011 0:00',7, N'Тема_2',8, N'Sergey',0,0 union all
select '19.10.2011 0:00',8, N'Тема_2',8, N'Sergey',0,0 union all
select '20.10.2011 0:00',9, N'Тема_2',8, N'Sergey',0,0 union all
select '21.10.2011 0:00',9, N'Тема_2',8, N'Sergey',0,0
27 янв 12, 17:10    [11985115]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
32sasha
Member

Откуда:
Сообщений: 503
Что-то наваял но некоторые данные удваиваться
select 
 t2.date,  t2.task_id, t2.Theme, t2.Hours ,t2.FIO, t2.Percentage, (select top 1 1 from #t where Percentage > 0 and FIO = t2.FIO and date = t2.date) flag
 ,t1.date,  t1.task_id, t1.Theme, t1.Hours ,t1.FIO, t1.Percentage
from #t as t1
right join  #t as t2 
on t1.Percentage > 0 and t1.FIO = t2.FIO and t1.date = t2.date
27 янв 12, 18:30    [11985855]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
32sasha
Member

Откуда:
Сообщений: 503
32sasha
Что-то наваял но некоторые данные удваиваться
select 
 t2.date,  t2.task_id, t2.Theme, t2.Hours ,t2.FIO, t2.Percentage, (select top 1 1 from #t where Percentage > 0 and FIO = t2.FIO and date = t2.date) flag
 ,t1.date,  t1.task_id, t1.Theme, t1.Hours ,t1.FIO, t1.Percentage
from #t as t1
right join  #t as t2 
on t1.Percentage > 0 and t1.FIO = t2.FIO and t1.date = t2.date


Этот код совсем не работает, не над теми данными отлаживался
27 янв 12, 19:02    [11986000]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста с нестандартной задачей  [new]
32sasha
Member

Откуда:
Сообщений: 503
Что-то наваял, каряво но кажется добился требуемого результата, скорость выполнения уже проверю в понедельник. Может кто-то поможет оптимизировать ):
SET LANGUAGE Russian

DECLARE @dt1 smalldatetime, @dt2 smalldatetime , @dt3 smalldatetime

	declare @StartDateCtrl nvarchar(25), @EndDateCtrl nvarchar(25)
	
	SET	@StartDateCtrl = '20111017'
	SET	@EndDateCtrl = '20111021'

	SET       @dt1 = @StartDateCtrl 
	SET       @dt2 = @EndDateCtrl 
	SET       @dt3 = @dt1

DECLARE @t TABLE ([Date] smalldatetime) 
	WHILE @dt1 <= @dt2 BEGIN
	INSERT INTO @t
	SELECT    @dt1
	SET       @dt1 = DATEADD(day, 1, @dt1) END


if object_id('tempdb..#t', 'U') > 0 drop table #t
create table	#t (date	datetime,	task_id int, Theme  nvarchar(255), Hours float, FIO	nvarchar(128), Percentage int)
insert into #t
select '17.10.2011 0:00',33, N'Тема_2',7, N'Andrey', null union all
select '18.10.2011 0:00',33, N'Тема_2',8, N'Andrey', null union all
select '19.10.2011 0:00',33, N'Тема_2',8, N'Andrey', null union all
select '20.10.2011 0:00',34, N'Тема_2',8, N'Andrey', null union all
select '21.10.2011 0:00',34, N'Тема_2',8, N'Andrey', null union all
select '18.10.2011 0:00',36, N'Тема_2',8, N'Igor', null union all
select '19.10.2011 0:00',37, N'Тема_2',8, N'Igor', null union all
select '20.10.2011 0:00',37, N'Тема_2',8, N'Igor', null union all
select '21.10.2011 0:00',37, N'Тема_2',8, N'Igor', null union all
select '17.10.2011 0:00',14, N'Тема_2',8, N'Ihor', null union all
select '18.10.2011 0:00',14, N'Тема_2',8, N'Ihor', null union all
select '19.10.2011 0:00',14, N'Тема_2',8, N'Ihor', null union all
select '20.10.2011 0:00',14, N'Тема_2',8, N'Ihor', null union all
select '21.10.2011 0:00',15, N'Тема_2',8, N'Ihor', null union all
select '17.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67 union all
select '18.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67 union all
select '18.10.2011 0:00',22, N'Тема_2',null, N'Kate',null union all
select '18.10.2011 0:00',23, N'Тема_2',8, N'Kate',67 union all
select '19.10.2011 0:00',2, N'Tema2 Proverka',NULL, N'Kate',67 union all
select '19.10.2011 0:00',23, N'Тема_2',3.9, N'Kate',67 union all
select '20.10.2011 0:00',23, N'Тема_2',8, N'Kate', null union all
select '21.10.2011 0:00',24, N'Тема_2',8, N'Kate', null union all
select '17.10.2011 0:00',6, N'Тема_2',8, N'Sergey', null union all
select '18.10.2011 0:00',7, N'Тема_2',8, N'Sergey', null union all
select '19.10.2011 0:00',8, N'Тема_2',8, N'Sergey', null union all
select '20.10.2011 0:00',9, N'Тема_2',8, N'Sergey', null union all
select '21.10.2011 0:00',9, N'Тема_2',8, N'Sergey', null


select DISTINCT td.date, t1.task_id, t1.Theme, t2.Hours, t1.FIO, t2.Percentage, (select top 1 1 from #t where Percentage > 0 and FIO = t1.FIO and date = td.date) flag
from @t as td join #t as t1 on 1=1
full join #t as t2 on td.date = t2.date and t1.FIO = t2.FIO and t1.task_id = t2.task_id 
27 янв 12, 20:38    [11986432]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить