Как объединить результаты двух запросов в один набор данных
У меня есть два запроса:
Упрощенные запросы, исключая объединения
Query 1 : select ProductName,NumberofProducts (in inventory) from Table1.....;
Query 2 : select ProductName, NumberofProductssold from Table2......;
Я хотел бы знать, как я могу получить вывод как:
ProductName NumberofProducts(in inventory) ProductName NumberofProductsSold
Отношения, используемые для получения выходов для каждого запроса, различны.
Мне нужен вывод для моего отчета SSRS.
(Я попробовал утверждение union, но он не работает для вывода, который я хочу видеть.)
Ответы
Ответ 1
Вот пример, который объединяет две совершенно не связанные таблицы: таблица Student и Products. Он генерирует вывод в 4 столбца:
select
FirstName as Column1,
LastName as Column2,
email as Column3,
null as Column4
from
Student
union
select
ProductName as Column1,
QuantityPerUnit as Column2,
null as Column3,
UnitsInStock as Column4
from
Products
Очевидно, вы настроите это для своей среды...
Ответ 2
Я думаю, что ты за чем-то вроде этого; (Используя row_number()
с CTE
и выполнив FULL OUTER JOIN
)
Пример скрипта
;with t1 as (
select col1,col2, row_number() over (order by col1) rn
from table1
),
t2 as (
select col3,col4, row_number() over (order by col3) rn
from table2
)
select col1,col2,col3,col4
from t1 full outer join t2 on t1.rn = t2.rn
Таблицы и данные:
create table table1 (col1 int, col2 int)
create table table2 (col3 int, col4 int)
insert into table1 values
(1,2),(3,4)
insert into table2 values
(10,11),(30,40),(50,60)
Результаты:
| COL1 | COL2 | COL3 | COL4 |
---------------------------------
| 1 | 2 | 10 | 11 |
| 3 | 4 | 30 | 40 |
| (null) | (null) | 50 | 60 |
Ответ 3
Как насчет,
select
col1,
col2,
null col3,
null col4
from Table1
union all
select
null col1,
null col2,
col4 col3,
col5 col4
from Table2;
Ответ 4
Если вы имеете в виду, что оба поля ProductName
должны иметь одинаковое значение, то:
SELECT a.ProductName,a.NumberofProducts,b.ProductName,b.NumberofProductsSold FROM Table1 a, Table2 b WHERE a.ProductName=b.ProductName;
Или, если вы хотите, чтобы столбец ProductName
отображался только один раз,
SELECT a.ProductName,a.NumberofProducts,b.NumberofProductsSold FROM Table1 a, Table2 b WHERE a.ProductName=b.ProductName;
В противном случае, если любая строка таблицы 1 может быть связана с любой строкой из таблицы2 (хотя я действительно удивляюсь, почему кто-то хочет это сделать), вы можете дать this взгляд.
Ответ 5
Проблема заключается в том, что если ваши таблицы не связаны, вы не можете определить, как присоединиться к ним, поэтому вам придется произвольно присоединиться к ним, что приведет к декартовому продукту:
select Table1.col1, Table1.col2, Table2.col3, Table2.col4
from Table1
cross join Table2
Если у вас были, например, следующие данные:
col1 col2
a 1
b 2
col3 col4
y 98
z 99
В итоге вы получите следующее:
col1 col2 col3 col4
a 1 y 98
a 1 z 99
b 2 y 98
b 2 z 99
Это то, что вы ищете? Если нет, и у вас есть некоторые способы связывания таблиц, тогда вам нужно будет включить это в объединение двух таблиц вместе, например:
select Table1.col1, Table1.col2, Table2.col3, Table2.col4
from Table1
inner join Table2
on Table1.JoiningField = Table2.JoiningField
Это приведет к тому, что вы соберетесь вместе, но данные связаны, давая вам свой результат.
Ответ 6
Попробуй это:
SELECT ProductName,NumberofProducts ,NumberofProductssold
FROM table1
JOIN table2
ON table1.ProductName = table2.ProductName
Ответ 7
Загрузите каждый запрос в datatable:
http://www.dotnetcurry.com/ShowArticle.aspx?ID=143
загрузите оба набора данных в набор данных:
http://msdn.microsoft.com/en-us/library/aeskbwf7%28v=vs.80%29.aspx
Ответ 8
Это то, что вы можете сделать. Предполагая, что ваш столбец ProductName
имеет общие значения.
SELECT
Table1.ProductName,
Table1.NumberofProducts,
Table2.ProductName,
Table2.NumberofProductssold
FROM Table1
INNER JOIN Table2
ON Table1.ProductName= Table2.ProductName
Ответ 9
Попробуйте следующее:
ПОЛУЧИТЕ ЗАПИСЬ ДЛЯ CURRENT_MONTH, LAST_MONTH AND ALL_TIME И СОХРАНЯЙТЕ ИХ В ОДНОМ МАССИВЕ
$analyticsData = $this->user->getMemberInfoCurrentMonth($userId);
$analyticsData1 = $this->user->getMemberInfoLastMonth($userId);
$analyticsData2 = $this->user->getMemberInfAllTime($userId);
foreach ($analyticsData2 as $arr) {
foreach ($analyticsData1 as $arr1) {
if ($arr->fullname == $arr1->fullname) {
$arr->last_send_count = $arr1->last_send_count;
break;
}else{
$arr->last_send_count = 0;
}
}
foreach ($analyticsData as $arr2) {
if ($arr->fullname == $arr2->fullname) {
$arr->current_send_count = $arr2->current_send_count;
break;
}else{
$arr->current_send_count = 0;
}
}
}
echo "<pre>";
print_r($analyticsData2);die;