Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Другие темы раздела
SQL Server Хранимые процедуры https://www.cyberforum.ru/ sql-server/ thread2350650.html
Всем привет! Есть такое задание: Увеличить количество часов на лабораторные работы на 5%, а количество лекций уменьшить на 5 % по дисциплинам, читаемым задаваемой кафедрой. Не могу сделать...
SQL Server Расчет значений между столбцами
Всем добрый вечер. Подскажите пожалуйста: написал запрос (ниже), количество столбцов может быть разное, как вычесть из столбца предыдущее значение, с учетом того, что количество столбцов может...
SQL Server Полное удаление SQL
Доброго времени суток. Подскажите пожалуйста как правильно полностью удалить ПЗ SQL с компа?Если можно пошаговою последовательность.Заранее спасибо
SQL Server Добавить таблицу к столбцу в выборке результатов при выполнении запросов через Ssms Добрый день. Подскажите может есть настройки чтобы при запросе select * from person left join groups g on g.groupid = person.groupid выводился бы результат ... https://www.cyberforum.ru/ sql-server/ thread2350314.html
SQL Server Создание представлений https://www.cyberforum.ru/ sql-server/ thread2349762.html
Здравствуйте, помогите пожалуйста с представлением: Создать представление, отображающее сотрудников, всегда выполнявших только заказы с однотипными компонентами(отбор сотрудников, у которых подсчет...
SQL Server Объединение определенных ячеек таблицы SQL Server
Имеется функция, которая возвращает таблицу. Таблица собирается из других объединенных таблиц. Но получается так, что у меня поля ФАМИЛИЯ ИМЯ ОТЧЕСТВО ДАТА_ЗАКАЗА ДАТА_ИСПОЛНЕНИЯ всегда будут...
SQL Server Объединение строк таблицы
Здравствуйте. Хотел узнать, есть ли возможность объединение нескольких определенных строк в таблице SQL Server. Допустим, есть таблица ЗАКАЗЫ(код_заказа, имя_заказчика) И если у нас один заказчик...
SQL Server Подключение к БД на VirtualBox MS SQL Server 2017(на VB). SSMS 2017(на PC и VB). MS SQL server установлен на Win10 в VirtualBox(VB), который стоит на PC. VB и PC видят друг друга через проводник. Тип подключения VB: сетевой... https://www.cyberforum.ru/ sql-server/ thread2348900.html
SQL Server Триггер при добавлении или изменении записи в таблице БД https://www.cyberforum.ru/ sql-server/ thread2348740.html
Есть таблица БД 1. в ней есть несколько столбцов: id, ...., schet, scet1, name, .... (в нее происходит запись из вне) Есть еще одна таблица БД 2. в ней есть несколько столбцов: id, name, schetchik,...
SQL Server Нужно для каждой даты посчитать процент вовремя выполненных заказов Добрый день, прошу помощи Есть 2 таблицы. Заказы (номер заказа, код клиента, дата заказа, срок сборки, дополнительная информация о заказе, адрес доставки); Сборка заказов (номер заказа, код... https://www.cyberforum.ru/ sql-server/ thread2348705.html
101 / 103 / 42
Регистрация: 11.01.2016
Сообщений: 908
19.11.2018, 12:23  [ТС] 0

Анрил таск. Преобразование данных

19.11.2018, 12:23. Просмотров 565. Ответов 9
Метки (Все метки)

Ответ

invm,
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
--таблица данных, в которой хранится  информация о пути проделанном из точки А в точку Б, 
-- во время пути были стоянки
--ParkingTime секунды простоя на парковке
--dist пройденный путь от одной записи к другой
DECLARE @DataPath TABLE (ParkingTime bigint, dist int, recordDate  datetime)
 
INSERT @DataPath VALUES (37520300000,0,GETDATE())
                            ,(930300000,28,GETDATE())
                            ,(0,42,GETDATE())
                            ,(0,64,GETDATE())
                            ,(200000000,58,GETDATE())
                            ,(0,65,GETDATE())
                            ,(0,84,GETDATE())
                            ,(0,83,GETDATE())
                            ,(0,76,GETDATE())
 
                            select * from @DataPath
-- нужно из таблицы @DataPath записать данные в новую результирующую таблицу
 
-- Number 
--,  первая запись number = 1 
-- Number увеличивать  каждый раз на 1, если данные ParkingTime > 0 из таблицы  @DataPath
-- получится для первых 5 объектов из таблицы @DataPath результат для поля Number будет : 1, 2, 2, 2, 3
 
-- ParkingTime секунды переконвертировать в time
 
-- all_dist = текущее значение dist + предудущие значение dist, 
-- получится для первых 5 объектов из таблицы @DataPath результат для поля all_dist будет : 42,70,112,176,234 
 
-- dist_from_prev_parking расстояние от текущей записи до  предыдущей парковки 
 
-- dist - это dist из таблицы  @DataPath 
-- recordTime записать время  из recordDate 
-- recordTimePlusparkingTime записать время  из recordDate  + ParkingTime
-- recordDate  - это данные из recordDate 
DECLARE @Result TABLE (Number int , ParkingTime time , dist decimal(7,2), dist_from_prev_parking decimal(7,2) null
                                        , dist_covered decimal(7,2), recordDate  datetime);
 
    DECLARE @Number smallint = null
    DECLARE @Distance decimal(7,2)
    DECLARE @pre_dist decimal(7,2)
    DECLARE @dist_covered decimal(7,2) = 0
    DECLARE @dist_from_prev_parking decimal(7,2) = null
 
    DECLARE @ParkingTime bigint
    DECLARE @recordDate  datetime
 
    DECLARE StageCursor CURSOR FOR
 
    SELECT 
           datas.ParkingTime AS ParkingTime,
             -- время записи предыдущей записи
           LAG(datas.dist, 1) OVER(ORDER BY datas.recordDate ),
           datas.dist,
           datas.recordDate 
         
    FROM @DataPath as datas
    OPEN StageCursor 
    FETCH NEXT FROM StageCursor INTO  @ParkingTime,@pre_dist,@Distance,@recordDate 
    WHILE @@FETCH_STATUS = 0
    BEGIN
 
    DECLARE @IsFirst BIT  = 0
    DECLARE @IsParking BIT  = 0
 
        -- Первая запись
        IF @Number IS NULL
        BEGIN
            SET @IsFirst = 1
            SET @Number = 1 
            SET @Distance = 0
            SET @ParkingTime = 0
        END
 
        IF (@ParkingTime>0) 
        BEGIN
            SET @IsParking = 1
            if(@IsFirst = 0)
            SET @Number = @Number + 1
        END
 
        if(@IsFirst = 0)
        SET @dist_from_prev_parking = @dist_from_prev_parking + @Distance 
 
        SET @dist_covered = @dist_covered + @Distance
        DECLARE @ForInsertParkingTime time =  CONVERT(VARCHAR(12),DATEADD(SECOND, @ParkingTime / 10000000, '19700101 00:00'), 114)
 
        INSERT INTO @Result VALUES(@Number, @ForInsertParkingTime,@Distance /1000,
         @dist_from_prev_parking /1000,@dist_covered /1000,@recordDate )
 
        IF (@IsParking = 1) 
            SET @dist_from_prev_parking = 0
 
        -- Следующий элемент курсора ячеек, пока есть записи
        FETCH NEXT FROM StageCursor INTO   @ParkingTime,@pre_dist,@Distance,@recordDate 
    END
    CLOSE StageCursor
    DEALLOCATE StageCursor
 
 
    select * from @Result


Вернуться к обсуждению:
Анрил таск. Преобразование данных
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2018, 12:23
Готовые ответы и решения:

таск 8
Создать новый квадратный двумерный массив из переданного двумерного массива, обрезав от последнего...

Таск киллер
Всем привет. Прошу Вашей помощи... Мне необходимо написать программу которая запускалась бы в фоне...

Не MainForm на таск баре
У меня есть несколько форм в проекте - главная, что то типа сплэша, форма коннекта к дб (если файл...

Окошко на таск баре
Доброго всем времени суток! Подскажите как убирать окошко с таск бара при свёртывание программы в ...

__________________
9
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.