2016-03-19 3 views
0

Предположим, у вас есть таблица Table1 с колоннамиРегистрация столбцов в строки

USERID, ITEM1 ст.2, ст.3, item4, Item5, Item6, ст.7, ст.8, Item9, Item10

и у вас есть еще одна таблица Table2 с

UserId, ItemId, название

. Значения в Таблица 1 является ItemId от Таблица 2. У меня есть необходимость отображения

UserId, ItemId, имя

где Элемент1 является первым и Item10 является последним и у вас есть 10 строк. Другими словами, Item1 - 1-я строка, а Item10 - последняя строка. Если есть какой-то способ избежать CASE КОГДА, это было бы здорово. У меня может быть больше столбцов в будущем, и я бы не хотел жестко кодировать 10 столбцов.

+0

Что точка table1 если table2 уже имеет всю необходимую информацию? Это просто для заказа элементов в Tabl2? Если да, то почему нет только столбца для заказа? –

+0

Таблица 1 представлена ​​с помощью механизма разработки AzureML. Я не контролирую, как он выводит данные. Поэтому для каждого пользователя он создает 10 рекомендуемых элементов. Мне нужно отобразить эти рекомендации на экране, основанные на моей таблице2. Пункт 1 в таблице 1 является наиболее рекомендуемым, а Item10 является наименее рекомендуемым. Надеюсь, он это очистит. – TimJohnson

+0

Это вопрос MachineLearning или TSQL? Почему вы упомянули ML? –

ответ

1

Я думаю, что вы хотите обратный шарнир в этом случае.Вы не можете использовать СЛУЧАЙ, как вы бы в нормальной оси, но вместо этого UNION ALL, как это:

select Table1.UserId, Table2.ItemId, Table2.Name 
from Table1 inner join Table2 on Table1.Item1 = Table2.ItemId 
UNION ALL 
select Table1.UserId, Table2.ItemId, Table2.Name 
from Table1 inner join Table2 on Table1.Item2 = Table2.ItemId 
UNION ALL 
... 
select Table1.UserId, Table2.ItemId, Table2.Name 
from Table1 inner join Table2 on Table1.Item10 = Table2.ItemId 

Если у вас есть больше деталей, вы также должны быть в состоянии написать фрагмент кода, который генерирует повторяющуюся UNION ALL синтаксис поэтому вам не нужно вводить все вручную.

0

table1 только с 3 столбцами

userid, itemid, sequence 

будет более благоприятным для ваших целей. Вы бы обязан преобразовать выход AzureML из одной линии

Uid1, itm1,itm2,itm3,...,itm10 

в 10 строк, как

Uid1, itm1, 1 
Uid1, itm2, 2 
Uid1, itm3, 3 
... 
Uid1, itm10,10 

Предполагая, что вы получите выше выходную линию в качестве (временный) вывода таблицы из AzureML с именем tbla вы могли бы использовать follwing UNION ALL конструкцию (как это было предложено Спенсер Симпсон):

INSERT INTO table1 (userid, itemid, sequence) 
SELECT uid, itm1, 1 FROM tbla UNION ALL 
SELECT uid, itm2, 2 FROM tbla UNION ALL 
SELECT uid, itm3, 3 FROM tbla UNION ALL 
SELECT uid, itm4, 4 FROM tbla UNION ALL 
... 
SELECT uid, itm10, 10 FROM tbla 

Для хранения информации в table1, который будет единственным столом, с которым вам придется иметь дело. No JOIN s потребуется больше.

Примечание: Я не совсем уверен, к чему относится ваша колонка name. Является ли это именем элемента или имени пользователя?

В обоих случаях должна быть вторая таблица table2, которая заботится о переписке между name и userid/itemid как

itm/usr name 

Эта таблица тогда будет join -ED в любой запрос, который требует, отображающий name колонка тоже.

1

Учитывая, что вы можете обойти это полностью с помощью SQL, я бы настоятельно рекомендовал использовать, например, R или Python для обработки транзакций с использованием ML. Пакет tidyr с функцией сбора делает именно то, что вы хотите сделать.

Другим способом является перекрестное соединение. Совершенно верно, выработка решения со стандартом SQL, но в R или Python многое может быть сделано намного проще.

+0

Я согласен, у меня есть редактор sql прямо сейчас, но я не нахожу документацию, как использовать функцию сбора или пакет tidyr, поэтому я прибегаю к sql, хотя я полностью согласен. – TimJohnson

0

Что я сделал, чтобы обойти это, было использовать Python (или R) и использовать функцию melt. В кадре данных также есть функция pivot_table.

Итак, вы можете преобразовать столбцы в строки. Затем присоедините эти строки к другой таблице.

Reshaping and Pivot Tables

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