Я пытаюсь взять 2 таблицы данных, 1 с данными из базы данных SQL и 1 с данными из базы данных Oracle. Сами запросы работают нормально, проблема в том, чтобы объединить их без потери данных. Я пробовал много разных способов, предложенных в предыдущих вопросах переполнения стека, но они не сработали либо из-за моего непонимания (вероятно), либо код не подходит для моей ситуации.
Самое последнее решение, над которым я работаю, это:
var leftOuterJoin = from table1 in mms_dt.AsEnumerable()
join table2 in flash_dt.AsEnumerable()
on new { X1 = (Decimal)table1["store_number"], X2 = (Decimal)table1["dept"] } equals new { X1 = Convert.ToDecimal(table2["store_number"]), X2 = Convert.ToDecimal(table2["dept"]) }
select new
{
Store = (Decimal)table1["store_number"],
Dept = Convert.ToDecimal(table1["dept"]),
WinDSS = (Decimal)table1["WinDSS"],
CORE = (Decimal)table1["CORE"],
RIM = (Decimal)table1["RIM"],
POS = (Decimal)table1["WinDSS"] + (Decimal)table1["CORE"],
Flash = Convert.ToDecimal(table2["sales_collected"]),
Difference = ((Decimal)table1["WinDSS"] + (Decimal)table1["CORE"]) - Convert.ToDecimal(table2["sales_collected"]),
Variance = (float)SafeDivision((((Decimal)table1["WinDSS"] + (Decimal)table1["CORE"]) - Convert.ToDecimal(table2["sales_collected"])), Convert.ToDecimal(table2["sales_collected"]))
}
into selection
orderby selection.Store, selection.Dept
select selection;
var rightOuterJoin = from table2 in flash_dt.AsEnumerable()
join table1 in mms_dt.AsEnumerable()
on new { X1 = Convert.ToDecimal(table2["store_number"]), X2 = Convert.ToDecimal(table2["dept"]) } equals new { X1 = Convert.ToDecimal(table1["store_number"]), X2 = Convert.ToDecimal(table1["dept"]) }
select new
{
Store = Convert.ToDecimal(table2["store_number"]),
Dept = Convert.ToDecimal(table2["dept"]),
WinDSS = (Decimal)table1["WinDSS"],
CORE = (Decimal)table1["CORE"],
RIM = (Decimal)table1["RIM"],
POS = (Decimal)table1["WinDSS"] + (Decimal)table1["CORE"],
Flash = Convert.ToDecimal(table2["sales_collected"]),
Difference = ((Decimal)table1["WinDSS"] + (Decimal)table1["CORE"]) - Convert.ToDecimal(table2["sales_collected"]),
Variance = (float)SafeDivision((((Decimal)table1["WinDSS"] + (Decimal)table1["CORE"]) - Convert.ToDecimal(table2["sales_collected"])), Convert.ToDecimal(table2["sales_collected"]))
}
into selection
orderby selection.Store, selection.Dept
select selection;
var res = leftOuterJoin.Union(rightOuterJoin);
foreach (var item in res)
{
Console.WriteLine(item);
}
mms_dt и flash_dt - мои две таблицы данных. Я хочу выполнить соединение в каждой строке, в которой есть номер магазина и соответствие отдела. Обе таблицы содержат «store_number» и «dept». mms_dt также содержит столбцы «WinDSS, CORE, RIM», в то время как flash_dt содержит вместо «sales_collected». Когда этот код выполняется, он показывает только те строки, в которых есть данные из обеих таблиц, при этом отсутствует вся точка полного внешнего соединения. Я на 99% уверен, что допускаю глупую ошибку в синтаксисе из-за недостатка знаний SQL.