45

我有两个查询:查询简化不包括联接

Query 1 : select ProductName,NumberofProducts (in inventory) from Table1.....;
Query 2 : select ProductName, NumberofProductssold from Table2......;

我想知道如何获得输出:

ProductName NumberofProducts(in inventory)  ProductName NumberofProductsSold

用于获取每个查询的输出的关系是不同的。我的 SSRS 报告需要以这种方式输出。

(我尝试了 union 语句,但它不适用于我想看到的输出。)

4

10 回答 10

81

这是一个在两个完全不相关的表之间进行联合的示例:学生表和产品表。它生成一个 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

显然,您会针对自己的环境进行调整...

于 2013-03-05T17:44:03.893 回答
39

我认为您正在追求这样的东西;(使用row_number()CTE执行 a 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 |
于 2013-03-05T17:50:09.463 回答
12

怎么样,

select
        col1, 
        col2, 
        null col3, 
        null col4 
    from Table1
union all
select 
        null col1, 
        null col2,
        col4 col3, 
        col5 col4 
    from Table2;
于 2013-03-05T17:44:44.570 回答
4

问题是,除非您的表是相关的,否则您无法确定如何加入它们,因此您必须任意加入它们,从而产生笛卡尔积:

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

无论数据是相关的,这都会为您整合所有内容,从而为您提供结果。

于 2013-03-05T17:44:50.163 回答
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;

否则,如果 Table1 的任何行可以与 Table2 中的任何行相关联(尽管我真的很想知道为什么有人想要这样做),你可以看看这个

于 2013-03-05T17:33:50.937 回答
3

老问题,但是其他人使用 JOIN 将不相关的查询组合到一个表中的行,这是我将不相关的查询组合到一行的解决方案,例如:

select 
  (select count(*) c from v$session where program = 'w3wp.exe') w3wp,
  (select count(*) c from v$session) total,
  sysdate
from dual;

给出以下单行输出:

W3WP   TOTAL  SYSDATE
-----  -----  -------------------
   14    290  2020/02/18 10:45:07

(这告诉我,我们的 Web 服务器当前使用 290 个会话中的 14 个 Oracle 会话;我在每隔几分钟运行一次的 sqlplus 脚本中记录这个没有标题的输出)

于 2020-02-18T09:55:12.627 回答
0

这是你可以做的。假设您的ProductName列具有共同值。

SELECT 
     Table1.ProductName, 
     Table1.NumberofProducts, 
     Table2.ProductName, 
     Table2.NumberofProductssold
FROM Table1
INNER JOIN Table2
ON Table1.ProductName= Table2.ProductName
于 2013-03-05T17:50:15.077 回答
0

尝试这个:

SELECT ProductName,NumberofProducts ,NumberofProductssold
   FROM table1 
     JOIN table2
     ON table1.ProductName = table2.ProductName
于 2013-03-05T17:45:14.407 回答
0

将每个查询加载到数据表中:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=143

将两个数据表加载到数据集中:

http://msdn.microsoft.com/en-us/library/aeskbwf7%28v=vs.80%29.aspx

于 2013-03-05T17:45:21.310 回答
-5

尝试这个:

获取 CURRENT_MONTH、LAST_MONTH 和 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;
于 2017-03-07T13:05:19.737 回答