2017-08-03 15 views
1

私は必要な結果ではないため、ユニオンは使用できません。共通の列がないため、結合を使用できません。私は多くの異なるSQLのクエリ構造を試して、何も私が望むように動作しません。SQLは2つのクエリ結果を結合します

本当にシンプルなSQLクエリだと私は信じています。私が今やっていることは

select a, b 
from (select top 4 a from element_type order by c) as Y, 
    (SELECT * FROM (VALUES (NULL), (1), (2), (3)) AS X(b)) as Z 

最初は、テーブルの一部であり、第二は、このような結果を与える選択作成した手です:

select a; --Give--> a,b,c,d (1 column) 
select b; --Give--> 1,2,3,4 (1 column) 

私は2つに基づいてクエリを必要とします最初に私に与えてください(2列):

a,1 
b,2 
c,3 
d,4 

どうすればいいですか? UNION、JOIN、または他の何か?それとも私はできないかもしれない。

私は今のところ得ることができるすべてはこれです:

a,1 
a,2 
a,3 
a,4 
b,1 
b,2 
... 
+1

異なるテーブルで選択しようとしている列はありますか?または両方が同じテーブルの一部ですか? –

+0

Thx情報のために私のコメントを更新したことを覚えてみてください。私は悪い英語のために申し訳ありません。 –

+0

テーブル構造の難読化されたバージョンと取得しようとしている望ましい出力を使用して質問を更新する方が便利です。 –

答えて

-1

あなたはユーザーROW_NUMBER()がこれを達成することができ、

select a,row_number() over(order by a) as b from element_type; 

あなたは他のテーブルからの第二の部分を取っていないので、あなたが参加を使用する必要はないので。しかし、別のテーブルでこれをやっている場合は、row_number()を使用してキーを作成し、それらのキーの両方のテーブルとベースに使用できます。

希望すると助かります。

+0

答えのためのThxそれはちょうど私がランク()関数を知らなかったことを捜していたものです、それは正確に何を見てみるために見てください。 –

+0

ようこそ他の組み合わせではrank()、dense_rank()などの別の関数があります。 – Pirate

+0

"これはキーを作成するためにランクを使うことができます"という理由で-1ですが、キーは通常一意であり、ランクの出力は与えられた行のセットに対してユニークであることが保証されていません。このテーブルのデータを他のテーブルに結合するキーを作成するためにRANK()を使用しないでください –

0

あなたが行が表示されるために、純粋に2つのテーブルを結合する場合は、私はあなたのデータベースのサポート分析(ウィンドウ)の機能を願っています:

SELECT * FROM 
    (SELECT t.*, ROW_NUMBER() OVER(ORDER BY x) as rown FROM table1 t) t1 
    INNER JOIN 
    (SELECT t.*, ROW_NUMBER() OVER(ORDER BY x) as rown FROM table2 t) t2 
    ON t1.rown = t2.rown 

本質的には、行に番号を付けることでそれらを結合するものを発明します。あなたのテーブルの1つにすでに1からのインクリメント整数が含まれている場合、そのテーブルにROW_NUMBER()OVER()を行う必要はありません。実際には、たとえ分析機能をサポートしていないとしても、行番号付けを行うという醜い方法があります。たとえば、テーブルを自分自身に戻すなど、行番号付けを行う方法があります。 id < idおよびCOUNT(*) .. GROUP BY idを使用して行番号を付けます。私はそれをするのが嫌いですが、あなたのDBがROW_NUMBERをサポートしていない場合は、例を投稿します:/

もちろん、RDBMSにはRの名前にRが付いています..関連。データが無関係なときにはうまくやっていないので、2つのテーブルが完全に無関係でも、チョークテーブルにチョークテーブルを参加させることが欲しいのであれば、それはなぜ難しい作業なのかを知ることになります。 :)

+0

海賊の回答がすでに私のやりたいことでうまくいっていても、あなたの解決策を後でテストしても、後で他の質問事項に役立つと確信しています。ヘルプのThx。 –

+0

RANK()は、2つの行が同じ値を持つ場合、カウントアップしません。つまり、a、b、b、cは1,2,2,4としてランク付けされ、dense_rankは1、 2,2,3。 ROW_NUMBER()は1,2,3,4のロー番号を付けます。 –

+0

@ MaxenceBovier-Lapierreも、これはOracleソリューションのようです。別のデータベースを使用している場合は、使用可能な機能がない可能性があります。そのため、使用しているデータベースで質問にタグを付けることが重要です。 – SandPiper

0

row_numberを使用してください。私はあなたを助けるかもしれない何かを作った。以下を参照してください:

declare @tableChar table(letter varchar) 

insert into @tableChar(letter) 
select 'a'; 

insert into @tableChar(letter) 
select 'b'; 

insert into @tableChar(letter) 
select 'c'; 

insert into @tableChar(letter) 
select 'd'; 

select letter,ROW_NUMBER() over(order by letter) from @tableChar 
関連する問題