MS SQL Server запрос, который разделяется на другие столбцы таблицы

266
Sarunas Radzevicius

У меня есть две таблицы:

table1:

Manager | USER  --------+------ John | Tom  John | David John | Marry James | Henry 

table2: Сейчас пусто, но должно быть так:

Manager | User1 | User2 | User3 --------+-------+-------+------- John | Tom | David | Marry James | Henry | null | null  

Является ли это возможным?

1
это конечно возможно, но ваши ограничения имеют значение. лично я написал бы sproc, который возвращает всех сотрудников из таблицы 1 для данного руководителя. затем курсор на отдельный список руководителей позволит вам получить всех подчиненных и вставить их в новую таблицу. Вероятно, есть способы сделать это, просто выбрав код, но ваши (плохо спроектированные) таблицы сделают это более трудным. Я бы порекомендовал вам придерживаться дизайна table1 и избегать дизайна table2, так как он нарушает вторую нормальную форму. Frank Thomas 8 лет назад 0
Если вам просто нужно сгенерировать отчет в этом формате во временную таблицу или что-то в этом роде, изучите синтаксис SELECT COALESCE, поскольку я генерировал отчеты в SQL Server, как вы описываете только для отчета, но я бы не стал делать это для постоянный дизайн стола, но это должно помочь вам начать. Проверьте dba.stackexchange.com также. Pimp Juice IT 8 лет назад 0
Да, вы просто запрашиваете и добавляете во временную таблицу. Вам нужно поделиться тем, что вы пробовали, чтобы мы могли помочь на основе вашего существующего кода :) Dave 8 лет назад 0

1 ответ на вопрос

0
shA.t

If table2 structure is fixed as you showed you can insert your expected result into it by a query like this:

INSERT INTO table2 (Manager, User1, User2, User3) SELECT Manager, MAX(CASE WHEN seq = 1 THEN [USER] END) AS User1, MAX(CASE WHEN seq = 2 THEN [USER] END) AS User2, MAX(CASE WHEN seq = 3 THEN [USER] END) AS User3 FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Manager ORDER BY [USER]) AS seq FROM table1) t GROUP BY Manager; 

But, If table2 structure is not fixed you need to use Dynamic SQL.