У меня есть следующая таблица в моем сервере MS SQL:MS SQL: Pivot/транспозиции таблица
User | Item | Date
1 | A | 2015-03-01
1 | B | 2015-03-03
1 | C | 2015-03-02
1 | A | 2015-03-05
2 | C | 2015-03-01
2 | C | 2015-03-03
2 | B | 2015-03-02
И эта таблица должна быть объединены/повернута/транспонировать в этом:
User | 1st_item | 2nd_item | 3rd_item | 4th_item
1 | A | C | B | A
2 | C | B | C | NULL
(The порядок элементов определяется датой в исходных данных.) К сожалению, я не знаю, как туда добраться ... В идеале решение также будет работать для гибкого количества элементов (не фиксировано на 4, как в примере).
То, что я пытался до сих пор:
- Я использовал row_number() OVER (PARTITION BY пользователя ORDER BY даты), чтобы создать столбец дает мне заказ в пределах элементов каждого пользователя
- Я попытался с помощью PIVOT - но здесь я не знаю, как получить элементы в столбцы, добавленные этой командой
Спасибо за любую помощь и/или подсказку заранее!
может ли быть более 4-х элементов на пользователе? –
Может быть больше 4. Но на данный момент было бы нормально ограничить его 4 ... – Daniel
Ну, вы можете попробовать сделать это с помощью 'ROW_NUMBER()', как вы предлагали, и объединить его с условной агрегацией: 'SELECT t.user, MAX (CASE WHEN t.rnk = 1 THEN t.item END) как 1st_item, MAX (CASE WHEN t.rnk = 2 THEN t.item END) как 2nd_item, MAX (CASE WHEN t .rnk = 3 THEN t.item END) как 3rd_item FROM (SELECT s. *, ROW_NUMBER() OVER (PARTITION by s.user ORDER BY s.date) как rnk FROM YourTable s) GROUP BY t.user ' – sagi