SQL-запрос с заказом по предложению - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть таблица, которая имеет 3 столбца.Продукт, имя, TimeStamp.В настоящее время у меня нет столбца rownumber.Если я получу запись из таблицы, я буду использовать

select * 
from table 
order by Product,Name,TimeStamp. 

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

Можно ли вставить значения в некотором порядке?при создании таблицы, как это?

OPERATOR    PRODUCT USER NAME   TIME STAMP
1           INS1    1YHS        2018-08-15 09:02:33.000
1           INS1    1YHS        2018-08-15 10:46:17.000
2           INS1    1YHS        2018-08-15 11:01:28.000
2           INS1    1YHS        2018-08-15 17:07:47.000

Здесь, если у оператора 1, берется лицензия на продукт INS1, а если у оператора 2, то возвращается лицензия на тот же продукт.Тот же человек может взять больше лицензий.В 1-й строке указаны детали лицензии и возвращена та же лицензия, а эта информация хранится в 3-й строке.для 2-й строки информация о лицензии возвращается в 4-й строке.

Мне нужно показать таблицу как

OPERATOR    PRODUCT USER NAME   TIME STAMP
1           INS1    1YHS        2018-08-15 09:02:33.000
2           INS1    1YHS        2018-08-15 11:01:28.000
1           INS1    1YHS        2018-08-15 10:46:17.000
2           INS1    1YHS        2018-08-15 17:07:47.000

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

'Транзакция' - это пара дублей + возврат.Его идентичность вычисляется из исходных данных, поэтому OPERATOR s можно сгруппировать так, как вам нужно.Запрос может не выполнить данные с непарными OPERATOR s.

declare @tbl table (
OPERATOR int,   
PRODUCT varchar(50), 
[USER NAME] varchar(100),    
[TIME STAMP] datetime);

insert into @tbl(OPERATOR, PRODUCT, [USER NAME], [TIME STAMP]) values
 (1, 'INS1', '1YHS', '2018-08-15 09:02:33.000')
,(1, 'INS1', '1YHS', '2018-08-15 10:46:17.000')
,(2, 'INS1', '1YHS', '2018-08-15 11:01:28.000')
,(2, 'INS1', '1YHS', '2018-08-15 17:07:47.000');

select OPERATOR, PRODUCT, [USER NAME], [TIME STAMP]
from (
    select OPERATOR, PRODUCT, [USER NAME], [TIME STAMP]
        , row_number() over(partition by PRODUCT, [USER NAME], OPERATOR order by [TIME STAMP]) transId 
    from @tbl) t
order by PRODUCT, [USER NAME], transId, OPERATOR;
0 голосов
/ 19 сентября 2019

Большинство СУБД имеют оконную функцию ROW_NUMBER() (заметное исключение - MySQL до версии 8.0):

select 
    t.* ,
    row_number() over(order by Product ,Name, TimeStamp) rn
from table t
order by Product, Name, TimeStamp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...