45

私は2つのクエリを持っています:結合を除く簡略化されたクエリ

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

出力を次のように取得する方法を知りたいです。

ProductName NumberofProducts(in inventory)  ProductName NumberofProductsSold

各クエリの出力を取得するために使用される関係は異なります。SSRS report には、この方法で出力が必要です。

(ユニオンステートメントを試しましたが、見たい出力では機能しません。)

4

10 に答える 10

81

以下は、まったく関連のない 2 つのテーブル (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

明らかに、これを自分の環境に合わせて調整します...

于 2013-03-05T17:44:03.893 に答える
39

私はあなたがこのような何かを求めていると思います。(での使用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 |
于 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

両方のProductNameフィールドが同じ値を持つことを意味する場合は、次のようになります。

SELECT a.ProductName,a.NumberofProducts,b.ProductName,b.NumberofProductsSold FROM Table1 a, Table2 b WHERE a.ProductName=b.ProductName;

または、ProductName列を 1 回だけ表示する場合は、

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 に答える
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

これはあなたが探しているものですか?そうでない場合、テーブルを関連付ける何らかの手段がある場合は、2 つのテーブルを結合する際にそれを含める必要があります。

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 に答える
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/askbwf7%28v=vs.80%29.aspx

于 2013-03-05T17:45:21.310 に答える