2015-11-10 2 views
0

В моем проекте мне нужно вставить данные таблицы из другой таблицы. Я пытаюсь написать этот код sql. Но этот порядок по выбору не работает при вставке данных. Вот мой код:Таблица данных вставка из другой таблицы с заказом sql

INSERT INTO StudentInfo_MeritPosition 
     (ID, 
     Name, 
     MeritPosition, 
     SSC, 
     HSC, 
     First, 
     Second, 
     Third, 
     Fourth, 
     Fifth 
     ) 
     SELECT ID, 
       Name, 
       MeritPosition, 
       SSC, 
       HSC, 
       First, 
       Second, 
       Third, 
       Fourth, 
       Fifth 
     FROM StudentInfo 
     ORDER BY MeritPosition 

Приведенный выше код вставляет данные в базу данных. Но не в формате заказа. Мне нужно знать, есть ли какие-либо способы для этой проблемы. Спасибо.

+0

Ваш код в порядке. Просьба уточнить, в чем проблема. Ваша фраза «Но не в формате заказа» не совсем понятна. –

+0

Фактически мои данные вставляются в таблицу StudentInfo_MeritPosition. но мне нужны данные в порядке позиционирования. Но вставляется то, что имеет таблица StudentInfo. –

+0

«Формат заказа» означает, что в этом формате позиция студента 3,2,5,9,6. Но когда новые данные будут сохранены в базе данных, он сохранит в столбце позиции достоинства, например 2,3,5,6,9. –

ответ

3

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

select mp.* 
from StudentInfo_MeritPosition mp 
order by mp.MeritPosition; 

Вы можете сделать этот запрос более эффективным путем добавления индекса на StudentInfo_MeritPosition(MeritPosition).

+0

На самом деле я не могу получить правильный вывод. Если хотите, напишите мне полную команду. –

+0

@asmmorshed. , , Это весь запрос SQL для получения результатов по порядку. Это не имеет никакого отношения к 'insert'. –

0

Вы можете использовать временную таблицу для заказа любым способом. По-моему, сначала проще собрать временную таблицу, затем упорядочить эти результаты и выбрать их в таблицу, которую вы пытаетесь заполнить в заданном порядке. Таким образом, вы можете перевести его в хранимую процедуру и передать ему параметр «имя столбца» и «ASC или DESC». Временная таблица займет немного больше времени, поскольку вы выбираете, заказываете, переустанавливаете и вставляете. Однако конечный результат гораздо более надежный, чем однократный запрос, позволяющий использовать любое имя столбца и ASC или DESC. Просто помните, что когда вы делаете выбор результатов в своей постоянной таблице, вы не указываете первичный ключ (обычно [P_ID]), который формирует ваш выбор в инструкции.

-1

Попробуйте это.

INSERT 

/*+append*/ 

INTO StudentInfo_MeritPosition 
     (ID, 
     Name, 
     MeritPosition, 
     SSC, 
     HSC, 
     First, 
     Second, 
     Third, 
     Fourth, 
     Fifth 
     ) 
SELECT * 
FROM ( 
     SELECT ID, 
      Name, 
      MeritPosition, 
      SSC, 
      HSC, 
      First, 
      Second, 
      Third, 
      Fourth, 
      Fifth 
     FROM StudentInfo 
     ORDER BY MeritPosition); 
+0

не работает. он показывает, что предложение ORDER BY недопустимо в представлениях этой ошибки –

0

Таким образом, чтобы улучшить ответ Гордона, вы могли бы написать что-то вроде того, что следует:

DECLARE @fromTbl, @sortCol, @orderByCol VARCHAR(50) 
EXEC(' 
select mp.* 
from /* StudentInfo_MeritPosition*/' + @fromTbl + 'mp 
order by /* mp.MeritPosition */ mp.' + @orderByCol + ' ' + @sortOrder;' 

    /* If you wanted to debug it and make sure your parameters are being 
    generated correctly, you can use the PRINT function instead of 
    Exec('Your statement above') */ 

Затем, если вы включите его в SP вы можете передать в таблице трех параметров, заказ столбец и порядок сортировки (ASC | DESC) и обойти процесс создания таблицы temp, о котором я упоминал ранее.

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