0

Q1 と Q2 の 2 つのクエリがあります。

Q1 では、デモと日付ごとに 1 つの結果が生成されます。

第 2 四半期は、デモ、日付、サイトごとに 1 つの結果を生成します。

また、特定のデモとサイトの第 2 四半期の日付は、第 1 四半期と一部重複します。

ただし、Q1 のすべての日付が表示されるわけではなく、Q1 にはなかった新しい日付が Q2 に表示される可能性もあります。

私がやりたいことは、基本的に第 1 四半期の結果 (行の下の行) が第 2 四半期のサイトの数に等しい結果テーブルを作成することです。

第 2 四半期の結果は、日付とデモが一致する 2 番目の列に表示されます。

Q1 の日付が Q2 のサイトに存在しない場合、エントリは 0 または null である必要があります。これは結合で達成できることは知っていますが、機能させることはできません。私は試した -

select a.result, b.site, b.result from
(Q1) as a right join (Q2) as b on a.demo = b.demo and a.date=b.date

しかし、これは奇妙な結果を生み出しています。a.result のエントリは、Q2 のサイトごとに異なりますが、そうではないはずです。

編集 - これが私がやろうとしていることです -

Q1 -

demo    |   date
------------------------------
1       |   10/31/2013
1       |   11/01/2013
2       |   11/02/2013

Q2 -

 demo   |   site    |   date
------------------------------
1       |   A       |   10/31/2013
1       |   A       |   11/01/2013
2       |   B       |   11/01/2013
2       |   B       |   11/02/2013

望ましい結果 -

    demo    |   date          | site
---------------------------------------
   1        |   10/31/2013    |  A
   1        |   11/01/2013    |  A
   2        |   11/02/2013    |  null
   1        |   10/31/2013    |  null
   1        |   11/01/2013    |  B
   2        |   11/02/2013    |  B  
4

3 に答える 3

0

明確化に基づいて、このクエリでその結果を取得できます。

SELECT
    a.demo,
    a.date,
    b.site
FROM (Q1) a
LEFT JOIN (Q2) a ON b.date = a.date

ただし、結果リストにあるように並べ替えるには、サブクエリでより多くの情報が必要になります。並べ替えに使用するサブクエリで一意の ID を生成するには、Row_Number() (MSSQL を使用していると仮定) などの関数を使用する必要があります。

于 2013-10-31T02:46:22.337 に答える
0

右結合の代わりに内部結合を使用する

select a.result, b.site, b.result from (Q1) as a 
inner join (Q2) as b on a.demo = b.demo and a.date=b.date
于 2013-10-31T02:42:13.387 に答える