2017-02-16 4 views
0

Я хотел бы заполнить переменную таблицы результатами из таблицы CADEPA. Единственная проблема заключается в том, что эти результаты должны быть заказаны.Перечислить переменную таблицы с упорядоченными результатами

Ошибка я получаю это:

Поручения п недействительна в представлениях, встроенных функциях, производных таблиц, подзапросов и общих табличных выражений, если TOP, не OFFSET или FOR также указано XML.

Запрос является:

DECLARE @DEPARTMENTS_TBL TABLE 
(
    DEPA_KEY INT     
) 

INSERT INTO @DEPARTMENTS_TBL(DEPA_KEY) 
SELECT DEPA_KEY 
FROM (
    SELECT DISTINCT DEPA_KEY 
    FROM CADEPA 
    WHERE DEPA_STA = '1' 
    ORDER BY DEPA_NME 
) P 
+1

движения заказ по статье в конце после того как вы алиас таблицы (P) – Kostis

+0

@ Kostis - не могли бы вы написать это как ответ? – FrenkyB

ответ

1

Переместить заказ по статье в конце после того как вы алиас таблицы (P)

INSERT INTO @DEPARTMENTS_TBL(DEPA_KEY) 
SELECT DISTINCT DEPA_KEY 
FROM (
    SELECT DEPA_KEY, DEPA_NME 
    FROM CADEPA 
    WHERE DEPA_STA = '1' 
) P 
ORDER BY DEPA_NME 
+0

внешний заказ (P) решил мою проблему. Если вы можете опубликовать это, пожалуйста. И я добавил столбец DEPA_NME в @DEPARTMENTS_TBL – FrenkyB

+0

Я обновил свой ответ ... вам также нужно вставить значение DEPA_NME в @DEPARTMENTS_TBL? – Kostis

+0

Да, я тоже это сделал. – FrenkyB

0

Таблицы представляют неупорядоченные наборы. Для того, чтобы делать то, что вы хотите, вам нужен ключ, чтобы представить порядок:

DECLARE @DEPARTMENTS_TBL TABLE (
    ID IDENTITY(1, 1) PRIMARY KEY 
    DEPA_KEY INT     
); 

INSERT INTO @DEPARTMENTS_TBL (DEPA_KEY) 
    SELECT DEPA_KEY 
    FROM CADEPA 
    WHERE DEPA_STA = '1' 
    GROUP BY DEPA_KEY 
    ORDER BY MAX(DEPA_NME); 

Я также думаю, что вы должны включать DEPA_NME в таблице, но id столбец будет держать порядок.

Убедитесь, что вы запрашиваете с order by:

select d.* 
from DEPARTMENTS_TBL d 
order by id; 
Смежные вопросы