2016-03-30 6 views
1

で何でしょう、あなたは、次のコードを持つことができます。.SelectManyは(X => x)でのC#でのSQL

string[][] Stuff = new string[] { new string[] {"1", "2", "3"}, new string[] {"4", "5", "6"} }; 
string[] OneList = Stuff.SelectMany(x => x).ToArray(); 

をだから私は同じが、SQLで行うことができるか、不思議でしたか?

表中(表1 |表2):

| 1 | 4 |
| 2 | 5 |
| 3 | 6 |

最終結果(表の結果同じ列の1 & 2):

| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |

これは一時テーブルを使用せずに行うことができますか?

これは単純なSQL文で行うことはできますか?

+2

データソースはどのように見えますか? 'SelectMany'はコレクションのコレクションを「平坦化」するために使用されるので、SQLでは可能ですが、テーブル構造に依存します。一般的にSQLでこれを実現する関数や演算子はありません。 –

+0

@DStanley:OPが明らかにサンプルテーブルの作成に使用していたので、コードスニペットアノテーションを再追加しました。 (ASCIIテーブルはこの目的にはより適しているかもしれませんが) – Heinzi

+0

@Heinzi Good here-私は、HTMLスニペットを使用してHTMLテーブルを生成できることを理解できませんでした。 ASCIIテーブルがより効果的だと同意する。 –

答えて

1

SQL Serverは「ネスト」結果セットをサポートしていないため、「平坦化」も意味を持ちません。

C#の例は2つのリストを取り、それらをラップしてから、それらを平坦化します。これは実際には、単純な連結のように書き換えることができます。

string[] OneList = Stuff[0].Concat(Stuff[1]).ToArray(); 

この操作は---結果セットを連結--- は、SQL Serverでサポートさです。あなたはUNION ALLを使用することができます。

SELECT column1 FROM table1 
UNION ALL 
SELECT column1 FROM table2 
ORDER BY column1 

注:

  • UNION ALLUNIONがそれらをフィルタリング、重複を保持します。 column1table2で別の名前を持っている場合

  • 、あなたのORDER BY句は、最初のSELECT句から列名を使用する必要があります。

+0

'UNION ALL'は' .Concat(...) 'です。 '.SelectMany(...)'は '' CROSS JOIN'/'CROSS APPLY'です。 –

+0

@MatthewWhited:SQL Serverはネストされたレコードセットをサポートしていないので、直接的な同等物はないと思います。私は、これが与えられた具体的な例の単なる解決であるというメモを付け加えました。 – Heinzi

+0

真ですが、それは近くにあり、 '.Concat'はEFとの' UNION ALL'になります。 –

関連する問題