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

Откуда: Москва
Сообщений: 104
Добрый день форумчане.
Я не особо знаю всех возможностей MSSQL2008R2.

У меня есть такая задача, которую я хочу реализовать в MSSQL2008R2.
Есть 2 таблицы:
В Таблице1 находятся данные, чистовик после внесения изменений.
 _________________________________________________
|Nomer|Name |Time |Comment |
|_____|___________|______________|________________|
| 10 |Test1 | 5.5 |NULL |
|_____|___________|______________|________________|
| 30 |Test2 | 25 |Big text<BR>... |
|_____|___________|______________|________________|
| 40 |Testik | 10.5 |NULL |
|_____|___________|______________|________________|
и т.д.

поле "Nomer" - уникальный номер, всегда больше на 10, но не всегда идет по порядку
(например номер 20 еще не внесена).


В Таблице2 находяться данные (все изменения) которые были сделаны и которые еще будут сделаны.
_________________________________________________________________
|ID |Nomer|Name |Time |Comment |Date_Izmen |
|___|_____|___________|______________|________________|___________|
|100| 10 |Test0 | 5.5 |money |01.01.2013 |
|___|_____|___________|______________|________________|___________|
|101| 10 |Test1 |NULL |NULL |05.01.2013 |
|___|_____|___________|______________|________________|___________|
|102| 10 |NULL |NULL |"" |10.01.2013 |
|___|_____|___________|______________|________________|___________|
|103| 20 |Test45 | 5 |text<BR>... |NULL |
|___|_____|___________|______________|________________|___________|
|104| 30 |Test2 | 15 |Big text<BR>... |01.01.2013 |
|___|_____|___________|______________|________________|___________|
|105| 30 |NULL | 25 |NULL |02.01.2013 |
|___|_____|___________|______________|________________|___________|
|106| 40 |Test5 | 10.5 |NULL |01.01.2013 |
|___|_____|___________|______________|________________|___________|
|107| 40 |Testik |NULL |French |NULL |
|___|_____|___________|______________|________________|___________|
и т.д.

поле ID - это уникальный номер, счетчик, идет по возрастанию.

в чем смысл таблицы2.
В ней забиты по порядку что и как изменялось.
Например
Вначале в таблицу1 занесли запись под номером 10, с полями все как в (ID 100)
Затем 05 числа ИЗМЕНИЛИ только не пустые поля, т.е. изменили NAME, (ID 101)
Затем стерли комментарий (ID 102).

про номер 20, т.к. date_izmen пустая, значит данное изменение еще не вступило в силу.

про номер 40, аналогично 10 и 20, но тут как раз ошибка.
Name уже стоит "Testik" а должно быть еще старое (ID 106) "Test5".

Так вот я и хочу каким-то образом сформировать таблицу, которая проверит соотвествие ЭТАЛОНА и Таблицы с СПИСКОМ ИЗМЕНЕИЙ.

Как я думал сделать, возможно создать пустую таблицу со всеми "NOMER" и в нее как-то вносить все данные изменения из Табл2, связывая по ключу
"NOMER", перебирая пустые поля.
1) Берем 1-ю запись из запроса с минимальной датой и дата не пустая;
2) вносим не пустые поля во временную таблицу;
3) удаяляем внесенную запись в Таблице2 (или может как-то ТОР перебирать);
4) и так по циклу.
5) после обработки всех записей из Таблицы2, сравниваем ЭТАЛОН и полученную таблицу и надо как-то показать отличия (ИСТИНА, ЛОЖЬ)

Вот то, что я бы хотел получить в итоге.
 _________________________________________________
|Nomer|Name |Time |Comment |
|_____|___________|______________|________________|
| 10 |ИСТИНА | ИСТИНА |ИСТИНА |
|_____|___________|______________|________________|
| 30 |ИСТИНА | ИСТИНА |ИСТИНА |
|_____|___________|______________|________________|
| 40 |ЛОЖЬ | ИСТИНА |ИСТИНА |
|_____|___________|______________|________________|

Я не могу настроить цикл :(
еще не понимаю CURSOR, может с помощью него как-то можно сделать.
вот пример моего кода :)
DECLARE @Nomer INT, @Nomer2 INT, @IDD INT

SELECT * FROM [tbl_SLA_List]
print @@ROWCOUNT

SET @Nomer = (SELECT MIN([Nomer]) FROM [tbl_SLA_List])
SET @Nomer2 = (SELECT MAX([Nomer]) FROM [tbl_SLA_List])
SET @IDD = (SELECT TOP 1 [ID] FROM [tbl_SLA_List] WHERE [Nomer] = @Nomer)
print @Nomer
print @Nomer2
print @IDD
print @@version

--while  @Nomer = @Nomer2
/*
WHILE(@Pos <= LEN(@UserNames))
BEGIN


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86)
Apr 2 2010 15:53:02
Copyright (c) Microsoft Corporation
Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
15 мар 13, 12:36    [14052160]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
+ Как-то так
declare @s table (Nomer int, Name varchar(100), [Time] varchar(100), Comment varchar(100));
declare @t table (ID int, Nomer int, Name varchar(100), [Time] varchar(100), Comment varchar(100), d date);

insert into @s
values
(10, 'Test1', '5.5', NULL),
(30, 'Test2', '25', 'Big text<BR>...'),
(40, 'Testik', '10.5', NULL);

insert into @t
values
(100, 10, 'Test', '5.5', 'money', '20130101'),
(101, 10, 'Test1', NULL, NULL, '20130105'),
(102, 10, NULL, NULL, '', '20130110'),
(103, 20, 'Test45', '5', 'text<BR>...', NULL),
(104, 30, 'Test2', '15', 'Big text<BR>', '20130101'),
(105, 30, NULL, '25', NULL, '20130102'),
(106, 40, 'Test5', '10.5', NULL, '20130101'),
(107, 40, 'Testik', NULL, 'French', NULL);

if object_id('tempdb..#t', 'U') is not null
 drop table #t;

select * into #t from @s where 0 = 1;
 
with x as
(
 select
  Nomer, Name, [Time], Comment,
  row_number() over (partition by Nomer, case when Name is not null then 1 end order by d desc, case when Name is not null then 0 else 1 end) as nn,
  row_number() over (partition by Nomer, case when [Time] is not null then 1 end order by d desc, case when [Time] is not null then 0 else 1 end) as nt,
  row_number() over (partition by Nomer, case when Comment is not null then 1 end order by d desc, case when Comment is not null then 0 else 1 end) as nc
 from
  @t
 where
  d is not null
)
insert into #t
 (Nomer, Name, [Time], Comment)
select
 Nomer,
 max(case when nn = 1 then Name end) as Name,
 max(case when nt = 1 then [Time] end) as [Time],
 max(case when nc = 1 then Comment end) as Comment
from
 x
group by
 Nomer;

select
 isnull(t.Nomer, s.Nomer) as Nomer,
 t.Name as t_Name,
 t.[Time] as t_Time,
 t.Comment as t_Comment,
 s.Name as s_Name,
 s.[Time] as s_Time,
 s.Comment as s_Comment
from
 #t t full join
 @s s on s.Nomer = t.Nomer
where
 not exists(select t.Name, t.[Time], t.Comment intersect select s.Name, s.[Time], s.Comment);
15 мар 13, 13:23    [14052508]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
invm
+ Как-то так


Спасибо большое, попробую сейчас применить к себе.
и потом пробую получить таблицу с результатом :)
15 мар 13, 13:49    [14052687]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
+Правильнее вот так:
declare @s table (Nomer int, Name varchar(100), [Time] varchar(100), Comment varchar(100));
declare @t table (ID int, Nomer int, Name varchar(100), [Time] varchar(100), Comment varchar(100), d date);

insert into @s
values
(10, 'Test1', '5.5', NULL),
(30, 'Test2', '25', 'Big text<BR>...'),
(40, 'Testik', '10.5', NULL);

insert into @t
values
(100, 10, 'Test', '5.5', 'money', '20130101'),
(101, 10, 'Test1', NULL, NULL, '20130105'),
(102, 10, NULL, NULL, '', '20130110'),
(103, 20, 'Test45', '5', 'text<BR>...', NULL),
(104, 30, 'Test2', '15', 'Big text<BR>', '20130101'),
(105, 30, NULL, '25', NULL, '20130102'),
(106, 40, 'Test5', '10.5', NULL, '20130101'),
(107, 40, 'Testik', NULL, 'French', NULL);

if object_id('tempdb..#t', 'U') is not null
 drop table #t;

select * into #t from @s where 0 = 1;
 
with x as
(
 select
  Nomer, Name, [Time], Comment,
  row_number() over (partition by Nomer, case when Name is not null then 1 end order by case when Name is not null then 0 else 1 end, d desc) as nn,
  row_number() over (partition by Nomer, case when [Time] is not null then 1 end order by case when [Time] is not null then 0 else 1 end, d desc) as nt,
  row_number() over (partition by Nomer, case when Comment is not null then 1 end order by case when Comment is not null then 0 else 1 end, d desc) as nc
 from
  @t
 where
  d is not null
)
insert into #t
 (Nomer, Name, [Time], Comment)
select
 Nomer,
 max(case when nn = 1 then Name end) as Name,
 max(case when nt = 1 then [Time] end) as [Time],
 max(case when nc = 1 then Comment end) as Comment
from
 x
group by
 Nomer;

select
 isnull(t.Nomer, s.Nomer) as Nomer,
 t.Name as t_Name,
 t.[Time] as t_Time,
 t.Comment as t_Comment,
 s.Name as s_Name,
 s.[Time] as s_Time,
 s.Comment as s_Comment
from
 #t t full join
 @s s on s.Nomer = t.Nomer
where
 not exists(select t.Name, t.[Time], t.Comment intersect select s.Name, s.[Time], s.Comment);
15 мар 13, 13:51    [14052699]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Гость333
Member

Откуда:
Сообщений: 3683
invm
Правильнее вот так:

Это ежели предположить, что в таблице изменений все пары (Nomer, Date_Izmen) уникальны. Если это не так, то, наверное, правильнее вместо максимального Date_Izmen брать максимальный ID изменения.
15 мар 13, 14:02    [14052771]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
автор
Гость333,


это я сам изначально сортирую таблицу по полям Nomer и Date_Izmen по возрастанию.
при импорте на сервер, получается что поле ID идет по возрастанию.
Думаю будет более правильно брать по максимальной дате изменения.

Хотя с другой стороны, если в один день будет несколько изменений, но это очень маловероятно.
15 мар 13, 14:20    [14052883]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Marchuk
Хотя с другой стороны, если в один день будет несколько изменений, но это очень маловероятно
Если такое возможно, то сделайте как предложил Гость333: замените сортировку по дате на сортировку по ID.
15 мар 13, 14:58    [14053137]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
invm,

я заменил последний запрос на такой вариант.
Можно еще поиграться, либо выводить вместо 'FALSE' либо значение эталона, либо значение обоих таблиц, и вместо NULL можно пустоту выводить, чтобы не так в глаза бросалось :)

Спасибо Вам огромное. Я еще не все смог разобрать, если не затруднит, то я бы у Вас поспрашивал некоторые моменты реализации.

select
 isnull(t.Nomer, s.Nomer) as Nomer,
 (case when t.Name <> s.Name then 'FALSE' end) as T_name,
 (case when t.[Time] <> s.[Time] then 'FALSE' end)  as t_Time,
  (case when t.Comment  <> s.Comment  then 'FALSE' end) as t_Comment--,
 --s.Name as s_Name,
 --s.[Time] as s_Time,
 --s.Comment as s_Comment
from
 #t t full join
 @s s on s.Nomer = t.Nomer
--where
-- not exists(select t.Name, t.[Time], t.Comment intersect select s.Name, s.[Time], s.Comment);


пробовал IF использовать, не получилось, поэтому использовал CASE.
IF  t.Name <> s.Name 
'FALSE' ;
else
'TRUE';

IF  t.Name <> s.Name 'FALSE' ;
else 'TRUE';
15 мар 13, 15:11    [14053237]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Marchuk,

Так в итоге что хотите получить?
15 мар 13, 16:18    [14053754]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Marchuk
 case when t.Name <> s.Name then 'FALSE' end

Делайте так:
case when t.Name = s.Name or (t.Name is null and s.Name is null) then 'TRUE' else'FALSE' end
15 мар 13, 16:22    [14053779]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
invm
Marchuk,

Так в итоге что хотите получить?

в первом посте писал
 _________________________________________________
|Nomer|Name |Time |Comment |
|_____|___________|______________|________________|
| 10 |ИСТИНА | ИСТИНА |ИСТИНА |
|_____|___________|______________|________________|
| 30 |ИСТИНА | ИСТИНА |ИСТИНА |
|_____|___________|______________|________________|
| 40 |ЛОЖЬ | ИСТИНА |ИСТИНА |
|_____|___________|______________|________________|

Спасибо, я уже сделал такую таблицу на основании Вашего запроса, заменив последний запрос.

with x as
(
 select
  Nomer, Name, [Time], Comment,
  row_number() over (partition by Nomer, case when Name is not null then 1 end order by case when Name is not null then 0 else 1 end, d desc) as nn,
  row_number() over (partition by Nomer, case when [Time] is not null then 1 end order by case when [Time] is not null then 0 else 1 end, d desc) as nt,
  row_number() over (partition by Nomer, case when Comment is not null then 1 end order by case when Comment is not null then 0 else 1 end, d desc) as nc
 from
  @t
 where
  d is not null
)
insert into #t
 (Nomer, Name, [Time], Comment)
select
 Nomer,
 max(case when nn = 1 then Name end) as Name,
 max(case when nt = 1 then [Time] end) as [Time],
 max(case when nc = 1 then Comment end) as Comment
from
 x
group by
 Nomer;


я не понимаю работу этого запроса.
Вижу что создаются к каждому столбцу, еще столбцы 'nn''nt''nc' в которые заносятся 1.
Но как это работает :) пока не разобрался
15 мар 13, 16:51    [14053984]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
сравниваю для поля, в обоих таблицах это тип "float"

,(case when t.[Норма, мин] <> s.[Norm_minutes] then t.[Норма, мин]+'(/'+s.[Norm_minutes]+'/)' ELSE '' end) as [Норма, мин,ФАЙЛ(/СЕРВЕР/)]


выдает ошибку
Сообщение 8114, уровень 16, состояние 5, строка 220
Ошибка при преобразовании типа данных varchar к float.


попробовал и CAST и CONVERT, не помогает.
(case when CAST(t.[Норма, мин] as nvarchar(5)) <> CAST (s.[Norm_minutes]	as nvarchar(5))	


если строчку закомментировать, то все проходит, в ячейках цифры с разделителем точка, есть 0.
15 мар 13, 19:14    [14054971]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
не понимаю откуда он берет что это varchar .
15 мар 13, 19:15    [14054976]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
весь код
+
if object_id('tempdb..#t', 'U') is not null
 drop table #t;

select * into #t from [tbl_SLA_List] where 0 = 1;
with x as
(
 select
	[Nomer],[Тип сбора],[Группа 1],[Группа 2],[Операция],[Норма, мин],[Источник данных],[Отчет],[Фильтр отбора данных],[Состав действия с хронометражем],[Блок для которого выполняется операция],[ог],[Филиал],[ОО/ДО],[ОНФ],[исключения],[Комментарий],[Учет операции в ДБ],
row_number() over (partition by Nomer, case when [Тип сбора]		is not null then 1 end order by case when [Тип сбора] is not null then 0 else 1 end, [Дата завершения] desc) as nn1,
row_number() over (partition by Nomer, case when [Группа 1]			is not null then 1 end order by case when [Группа 1] is not null then 0 else 1 end, [Дата завершения] desc) as nn2,
row_number() over (partition by Nomer, case when [Группа 2]			is not null then 1 end order by case when [Группа 2] is not null then 0 else 1 end, [Дата завершения] desc) as nn3,
row_number() over (partition by Nomer, case when [Операция]			is not null then 1 end order by case when [Операция] is not null then 0 else 1 end, [Дата завершения] desc) as nn4,
row_number() over (partition by Nomer, case when [Норма, мин]		is not null then 1 end order by case when [Норма, мин]	is not null then 0 else 1 end, [Дата завершения] desc) as nn5,
row_number() over (partition by Nomer, case when [Источник данных]	is not null then 1 end order by case when [Источник данных]	is not null then 0 else 1 end, [Дата завершения] desc) as nn6,
row_number() over (partition by Nomer, case when [Отчет]			is not null then 1 end order by case when [Отчет]	is not null then 0 else 1 end, [Дата завершения] desc) as nn7,
row_number() over (partition by Nomer, case when [Фильтр отбора данных]	is not null then 1 end order by case when [Фильтр отбора данных]	is not null then 0 else 1 end, [Дата завершения] desc) as nn8,
row_number() over (partition by Nomer, case when [Состав действия с хронометражем]	is not null then 1 end order by case when [Состав действия с хронометражем]	is not null then 0 else 1 end, [Дата завершения] desc) as nn9,
row_number() over (partition by Nomer, case when [Блок для которого выполняется операция]	is not null then 1 end order by case when [Блок для которого выполняется операция]	is not null then 0 else 1 end, [Дата завершения] desc) as nn10,
row_number() over (partition by Nomer, case when [ог]	is not null then 1 end order by case when [ог]	is not null then 0 else 1 end, [Дата завершения] desc) as nn11,
row_number() over (partition by Nomer, case when [Филиал]	is not null then 1 end order by case when [Филиал]	is not null then 0 else 1 end, [Дата завершения] desc) as nn12,
row_number() over (partition by Nomer, case when [ОО/ДО]	is not null then 1 end order by case when [ОО/ДО]	is not null then 0 else 1 end, [Дата завершения] desc) as nn13,
row_number() over (partition by Nomer, case when [ОНФ]	is not null then 1 end order by case when [ОНФ]	is not null then 0 else 1 end, [Дата завершения] desc) as nn14,
row_number() over (partition by Nomer, case when [исключения]	is not null then 1 end order by case when [исключения]	is not null then 0 else 1 end, [Дата завершения] desc) as nn15,
row_number() over (partition by Nomer, case when [Комментарий]	is not null then 1 end order by case when [Комментарий]	is not null then 0 else 1 end, [Дата завершения] desc) as nn16,
row_number() over (partition by Nomer, case when [Учет операции в ДБ]	is not null then 1 end order by case when [Учет операции в ДБ]	is not null then 0 else 1 end, [Дата завершения] desc) as nn17

 from
 [tbl_SLA_List]
 where
 [Дата завершения] is not null
)
insert into #t
 (	[Nomer]
 ,[Тип сбора]
 ,[Группа 1]
 ,[Группа 2]
 ,[Операция]
 ,[Норма, мин] 
 ,[Источник данных]
 ,[Отчет]
 ,[Фильтр отбора данных]
 ,[Состав действия с хронометражем]
 ,[Блок для которого выполняется операция]
 ,[ог]
 ,[Филиал]
 ,[ОО/ДО]
 ,[ОНФ]
 ,[исключения]
 ,[Комментарий]
 ,[Учет операции в ДБ])
select
 Nomer,
max(case when nn1 = 1 then [Тип сбора]	end) as  [Тип сбора]	,
max(case when nn2 = 1 then [Группа 1]	end) as  [Группа 1]	,
max(case when nn3 = 1 then [Группа 2]	end) as  [Группа 2]	,
max(case when nn4 = 1 then [Операция]	end) as  [Операция]	,
max(case when nn5 = 1 then [Норма, мин]	end) as  [Норма, мин]	,
max(case when nn6 = 1 then [Источник данных]	end) as  [Источник данных]	,
max(case when nn7 = 1 then [Отчет]	end) as  [Отчет]	,
max(case when nn8 = 1 then [Фильтр отбора данных]	end) as  [Фильтр отбора данных]	,
max(case when nn9 = 1 then [Состав действия с хронометражем]	end) as  [Состав действия с хронометражем]	,
max(case when nn10 = 1 then [Блок для которого выполняется операция]	end) as  [Блок для которого выполняется операция]	,
max(case when nn11 = 1 then [ог]	end) as  [ог]	,
max(case when nn12 = 1 then [Филиал]	end) as  [Филиал]	,
max(case when nn13 = 1 then [ОО/ДО]	end) as  [ОО/ДО]	,
max(case when nn14 = 1 then [ОНФ]	end) as  [ОНФ]	,
max(case when nn15 = 1 then [исключения]	end) as  [исключения]	,
max(case when nn16 = 1 then [Комментарий]	end) as  [Комментарий]	,
''--(case when nn17 = 1 then [Учет операции в ДБ]	end) as  [Учет операции в ДБ]	
from
 x
group by
 Nomer;
 
 select * from #t
 
 select
 isnull(t.Nomer, s.Nomer) as Nomer
 ,(case when t.[Тип сбора] <> (select [Name_Type_collection] from [ctl_Type_collection] where [ID_Type_collection]= s.[Type_collection]) then t.[Тип сбора]+'(/'+(select [Name_Type_collection] from [ctl_Type_collection] where [ID_Type_collection]= s.[Type_collection])+'/)' ELSE '' end)	as [Тип сбора,ФАЙЛ(/СЕРВЕР/)]
 ,(case when t.[Группа 1] <> (select [Name_Group] from [ctl_Group] where [ID_Group] = s.[Group])											then t.[Группа 1]+'(/'+(select [Name_Group] from [ctl_Group] where [ID_Group] = s.[Group])+'/)' ELSE ''	 end)											as [Группа,ФАЙЛ(/СЕРВЕР/)]
 ,(case when t.[Группа 2] <> (select [Name_Subgroup] from [ctl_Subgroup] where [ID_Subgroup] = s.[Subgroup])								then t.[Группа 2]+'(/'+(select [Name_Subgroup] from [ctl_Subgroup] where [ID_Subgroup] = s.[Subgroup])+'/)' ELSE ''	 end)								as [Подгруппа,ФАЙЛ(/СЕРВЕР/)]
 ,(case when t.[Операция] <> s.[Name_operation]																							then t.[Операция]+'(/'+s.[Name_operation]+'/)' ELSE ''	 end)																							as [Операция,ФАЙЛ(/СЕРВЕР/)]
 ,(case when t.[Норма, мин] <> s.[Norm_minutes] then t.[Норма, мин]+'(/'+s.[Norm_minutes]+'/)' ELSE '' end) as [Норма, мин,ФАЙЛ(/СЕРВЕР/)]
from
 #t t full join
 [tbl_SLA] s on s.Nomer = t.Nomer
15 мар 13, 19:17    [14054989]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
Marchuk
,(case when t.[Норма, мин] <> s.[Norm_minutes] then cast(t.[Норма, мин] as varchar(50))+'(/'+cast(s.[Norm_minutes] as varhar(50))+'/)' ELSE '' end) as [Норма, мин,ФАЙЛ(/СЕРВЕР/)]
15 мар 13, 20:15    [14055230]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
invm
Marchuk
,(case when t.[Норма, мин] <> s.[Norm_minutes] then cast(t.[Норма, мин] as varchar(50))+'(/'+cast(s.[Norm_minutes] as varhar(50))+'/)' ELSE '' end) as [Норма, мин,ФАЙЛ(/СЕРВЕР/)]


Спасибо большое, об этом я что то забыл. Смогу проверить только в понедельник.
15 мар 13, 20:21    [14055248]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
invm
Marchuk
,(case when t.[Норма, мин] <> s.[Norm_minutes] then cast(t.[Норма, мин] as varchar(50))+'(/'+cast(s.[Norm_minutes] as varhar(50))+'/)' ELSE '' end) as [Норма, мин,ФАЙЛ(/СЕРВЕР/)]


проверил, заработало, спасибо большое :)

теперь задался вопросом по поводу, если в один день было несколько изменений :)

написал
else 1 end,  [id] asc ) as nn1,

вместо
else 1 end, [Дата завершения] desc) as nn1,

вообще фигня получается.

а если пробую так
else 1 end, [Дата завершения] desc , [id] asc ) as nn1,

тоже не срабатывает, если в один день было несколько изменений.

и еще одно поле у меня (ЛОЖЬ/ИСТИНА) бит короче. я пока его исключил, т.к. на нем спотыкалось. это не к спешу, главное правильно формировать саму таблицу :)
max(case when nn16 = 1 then [Комментарий]	end) as  [Комментарий]	,
''--(case when nn17 = 1 then [Учет операции в ДБ]	end) as  [Учет операции в ДБ]	
18 мар 13, 20:04    [14064360]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
else 1 end,  [id] desc ) as nn1,
18 мар 13, 20:10    [14064370]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
Хорошо попробую по убыванию. DESC.
18 мар 13, 20:45    [14064432]     Ответить | Цитировать Сообщить модератору
 Re: Создание итоговой таблицы и сравнение с эталоной версией  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 104
invm,

c DESC работает.
25 мар 13, 14:35    [14092265]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить