2010-11-08 3 views
1

Позвольте мне описать это как можно лучше, это касается SQL Server.SQL-запрос должен возвращать записи первичной записи и вспомогательные записи

Существует главный стол с одной записью для каждого участника, есть подкатегория с MOST 5 записей на участника.

Мне нужно вернуть ВСЕ записи в основной таблице вместе с записями подкатегорий для каждого участника в пределах одной записи в запросе SELECT.

Пример:

Main Table: 
    Participant_ID, 
    Program 
Sub Table: 
    Participant_ID, 
    Skill_Set_ID, 
    Rating 

SQL Query results: 
    Participant_ID, Program, Skill_Set_ID_1, Rating_1, Skill_Set_ID_2, Rating_2, Skill_Set_ID_3, Rating_3, Skill_Set_ID_4, Rating_4, Skill_Set_ID_5, Rating_5 

В основном строки в столбцы идеи.

Как это сделать? Я нахожусь в общей сумме потерь

ответ

1
select mt.Participant_ID, mt.Program, 
     st1.Skill_Set_ID as Skill_Set_ID_1, st1.Rating as Rating_1, 
     st2.Skill_Set_ID as Skill_Set_ID_2, st2.Rating as Rating_2, 
     st3.Skill_Set_ID as Skill_Set_ID_3, st3.Rating as Rating_3, 
     st4.Skill_Set_ID as Skill_Set_ID_4, st4.Rating as Rating_4, 
     st5.Skill_Set_ID as Skill_Set_ID_5, st5.Rating as Rating_5, st5.Skill_Text 
     st6.Skill_Set_ID as Skill_Set_ID_6, st6.Rating as Rating_6, st6.Skill_Text 
     st7.Skill_Set_ID as Skill_Set_ID_7, st5.Rating as Rating_7, st7.Skill_Text 
    from main_table mt 
     left join sub_table st1 
      on mt.Participant_ID = st1.Paticipant_ID 
       and st1.Skill_Set_ID = 1 
     left join sub_table st2 
      on mt.Participant_ID = st2.Paticipant_ID 
       and st2.Skill_Set_ID = 2 
     left join sub_table st3 
      on mt.Participant_ID = st3.Paticipant_ID 
       and st3.Skill_Set_ID = 3 
     left join sub_table st4 
      on mt.Participant_ID = st4.Paticipant_ID 
       and st4.Skill_Set_ID = 4 
     left join sub_table st5 
      on mt.Participant_ID = st5.Paticipant_ID 
       and st5.Skill_Set_ID = 5 
       and st5.Skill_Text = 'Skill A' 
     left join sub_table st6 
      on mt.Participant_ID = st6.Paticipant_ID 
       and st6.Skill_Set_ID = 5 
       and st6.Skill_Text = 'Skill B' 
     left join sub_table st7 
      on mt.Participant_ID = st7.Paticipant_ID 
       and st7.Skill_Set_ID = 5 
       and st7.Skill_Text = 'Skill C' 
+0

Это может сработать, но я просто просмотрел таблицу, и там может быть до 7 записей набора навыков, но есть оговорка, набор навыков 1 - 4 статичен с другим идентификатором, однако набор навыков 5 - 7 является дополнительным и имеет тот же идентификатор. – mattgcon

+0

@mattgcon: Как бы вы дифференцировали 5-7, если у них одинаковый идентификатор? –

+0

по дополнительному столбцу с введенным текстом типа навыка – mattgcon

-1
SELECT * 
FROM Main_Table, Sub_Table 
WHERE Main_Table.Participant_ID = Sub_Table.Participant_ID; 

Использует ли SQL Server стандартный SQL?

+0

Это не сработает. Основная таблица не содержит никакой информации в вспомогательной таблице, кроме идентификатора участника – mattgcon

+0

Также вы делаете кросс-соединение здесь .... – JNK

+0

@mattgcon: Что значит? Единственными перекрестными данными, которые вам нужны, является значение Memberant_ID, а 'SELECT *' будет возвращать все столбцы из обеих таблиц. Имейте в виду, что он вернет декартовой продукт, поэтому я бы посоветовал использовать 'SELECT DISTINCT *', если вы хотите отфильтровать избыточные кортежи. –

0

Вам нужно сделать стержень здесь. Но проблема с вашим делом заключается в том, что вам нужно опираться на несколько столбцов. Я надеюсь, что это указывает на то, что вы в правильном направлении Multiple Column Pivot in T-SQL

+0

LOL Я попробовал стержень, но я выглядел более смущенным, чем обезьяна, пытающаяся прочитать книгу. – mattgcon

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