2014-06-19 4 views
-2

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

FunctionID Name   ParentFunctionID OrderNo Enabled ControllerName ActionName 
1   Nikhil  0    10  1  nik 
2   Sahil  0    20  1  sah 
3   With   2    10  1  sah   Withsnew 
4   User   2    20  1  sah   users 
5   Pen   2    10  0  sah   pend 
44   User Summary 2    210  1  sah   usersummary 
45   Summary  2    230  1  sah   summary 
46   Hourly  1    231  1  nik   hourly 
47   Code   1    232  1  nik   code 

Я хочу Таблицу как

FunctionID Name   ParentFunctionID OrderNo Enabled ControllerName ActionName 
1   Nikhil  0    1  1  nik 
2   Sahil  0    2  1  sah 
3   With   2    1  1  sah   Withsnew 
4   User   2    2  1  sah   users 
5   Pen   2    3  0  sah   pend 
44   User Summary 2    4  1  sah   usersummary 
45   Summary  2    5  1  sah   summary 
46   Hourly  1    1  1  nik   hourly 
47   Code   1    2  1  nik   code 
+1

Похоже, вы хотите изменить порядковые номера, но я не вижу шаблон. Что вы пытаетесь сделать точно? – mikeyq6

+0

Я понимаю шаблон. Он хочет, чтобы номера строк 1,2,3,4 отображались в поле orderNo. –

ответ

0

ИСПОЛЬЗОВАНИЕ ROWNUM ОПЦИЯ:

SELECT 
    FunctionID , 
    Name , 
    ParentFunctionID, 
    ROWNUM AS ORDER_NO, 
    Enabled, 
    ControllerName , 
    ActionName 
FROM TABLE NAME; 

Если вы хотите рулонах для сброса на основе конкретных условий, используйте PARTITION вместе с ROW_NUMBER AS:

SELECT 
    FunctionID , 
    Name , 
    ParentFunctionID, 
    ROW_NUMBER() OVER (PARTITION BY ParentFunctionID ORDER BY FunctionID) AS ORDER_NO, 
    Enabled, 
    ControllerName , 
    ActionName 
FROM TABLE NAME; 
+0

согласно моим знаниям ROWNUM поддерживается только в ORACLE, а вопросы связаны с SQL-SERVER, поэтому здесь ROWNUM не будет работать. –

+0

@AnkitBajpai: Я не использовал SQL Server и имею опыт работы с ORACLE. Спасибо, что дали мне знать :-) . Кстати, мой второй запрос подходит для SQL Server. –

0

Вы можете использовать ROW_NUMBER (Transact-SQL) перечислить ваши строки разбиты на разделы ParentFunctionID заказанного FunctionID, чтобы получить результат, который вы хотите.

SQL Fiddle

Сервер 2012 Настройка схемы MS SQL:

create table YourTable 
(
    FunctionID int, 
    Name varchar(20), 
    ParentFunctionID int, 
    OrderNo int, 
    Enabled bit, 
    ControllerName varchar(20), 
    ActionName varchar(20) 
) 

go 

insert into YourTable values 
(1 ,   'Nikhil  ', 0,    10 ,  1,  'nik',   '   '), 
(2 ,   'Sahil  ', 0,    20 ,  1,  'sah',   '   '), 
(3 ,   'With  ', 2,    10 ,  1,  'sah',   'Withsnew '), 
(4 ,   'User  ', 2,    20 ,  1,  'sah',   'users  '), 
(5 ,   'Pen   ', 2,    10 ,  0,  'sah',   'pend  '), 
(44,   'User Summary', 2,    210,  1,  'sah',   'usersummary'), 
(45,   'Summary  ', 2,    230,  1,  'sah',   'summary '), 
(46,   'Hourly  ', 1,    231,  1,  'nik',   'hourly  '), 
(47,   'Code  ', 1,    232,  1,  'nik',   'code  ') 

Запрос 1:

with C as 
(
    select OrderNo, 
     row_number() over(partition by ParentFunctionID order by FunctionID) as rn 
    from YourTable 
) 
update C 
set OrderNo = rn 

select * 
from YourTable 

Results:

| FUNCTIONID |   NAME | PARENTFUNCTIONID | ORDERNO | ENABLED | CONTROLLERNAME | ACTIONNAME | 
|------------|--------------|------------------|---------|---------|----------------|-------------| 
|   1 | Nikhil  |    0 |  1 |  1 |   nik |    | 
|   2 | Sahil  |    0 |  2 |  1 |   sah |    | 
|   3 | With   |    2 |  1 |  1 |   sah | Withsnew | 
|   4 | User   |    2 |  2 |  1 |   sah | users  | 
|   5 | Pen   |    2 |  3 |  0 |   sah | pend  | 
|   44 | User Summary |    2 |  4 |  1 |   sah | usersummary | 
|   45 | Summary  |    2 |  5 |  1 |   sah | summary  | 
|   46 | Hourly  |    1 |  1 |  1 |   nik | hourly  | 
|   47 | Code   |    1 |  2 |  1 |   nik | code  | 
+0

Человек с ретрансляцией 75 тыс. Не знает, что предоставление всего лишь фрагмента кода, даже без крошечного объяснения здесь очень плохое? Я не удивлен, что ваш ответ был отмечен как некачественный и удаляться! – trejder

+1

@trejder Работа над ней. Это было не только низкое качество, но и неправильное. –

+0

Отлично, тогда! :] – trejder

0

вы можете использовать ROW_NUMBER и раздел, ParentFunctionID, как эта

SELECT FunctionID, Name, ParentFunctionID 
, ROW_NUMBER() OVER(PARTITION BY ParentFunctionID ORDER BY FunctionID) OrderNo 
, [Enabled], ControllerName, ActionName 
FROM TABLENAME 

этого возвращает результирующий, если вы хотите обновить вы можете изменить сценарий.

Надеюсь, это полезно.

Смежные вопросы