Я искал весь день, но не смог найти ответ на этот вопрос:SQL - Вставка нескольких записей из выбора
У меня есть таблица по SQL Server:
dbo.Program
с полями:
- Program.id ... PK автоинкремент
- Program.user ... VARCHAR
- Program.program ... VARCHAR
- Program.installed ... булево
- Program.department ... VARCHAR
- Program.wheninstalled ... Дата
Теперь я хочу вставить новую запись для каждого отдельного пользователя и скопировать отдел из своей последней (Program.wheninstalled) записи с другими значениями одинаковы для каждого пользователя:
- Program.user ... каждый уникальный пользователь
- Program.program ... MyMostAwesomeProgram
- Program.installed ... ложная
- Program.department ... отдел записи с последней program.wheninstalled поле из всех записи уникального пользователя в program.user
- Program.wheninstalled ... нуль
Я знаю, как сделать это в уродливом виде:
- выбрать последние записи для каждого пользователя и их отдел в этой записи
- извлечения значений из 1) и превратить его в вставку в (field1, field2 ... fieldX) значения (1records_value1, 1records_value2 ... 1records_valueX), (2records_value1, 2records_value2 ... 2records_valueX), ... (Nrecords_value1, Nrecords_value2 ... Nrecords_valueX)
, но я хотел бы знать, как сделать это в лучшую сторону. О, я не могу использовать некоторые подходящие данные о человеке, чтобы облегчить мне жизнь, поэтому теперь я должен работать.
пс. хороший блог об этом и подобных функциях здесь, если вы хотите прочитать об этом. http://blog.sqlauthority.com/2007/10/09/sql-server-2005-sample-example-of-ranking-functions-row_number-rank-dense_rank-ntile/ – JohnLBevan
Большое спасибо. Ваш запрос помог мне сделать это, наконец,. Теперь я понимаю раздел vs vs group by, те короткие псевдонимы, и в конце я использовал некоторую функцию ранжирования, потому что ваш запрос привел к возврату только одной строки. Но с ранга он отлично работает:]. В любом случае для тех, кто может это сделать google: –