2017-01-03 12 views
1

データベース目的でSQL Serverを使用しています。複数の選択クエリ結果をSQL Serverの1つの最終テーブルに結合します。

私は選択したデータの選択クエリを返すストアドプロシージャを持っています。

例:Role = Admin場合

  1. 、いくつかの選択クエリを行うと、Role = Employee場合@table1
  2. に挿入、実行します。

    DECLARE @table1 TABLE 
        (
         UserId int, 
         FullName varchar(200), 
         FirstName varchar(200), 
         LastName varchar(200), 
         Status varchar(10), 
         Role varchar(50) 
        ) 
    

    私が賢明のようなクエリデータを選択した状態を返すために、これを使用していますいくつかの選択クエリと挿入する@table1

  3. Role = Accountant、いくつかの選択クエリを行うと、Role = Worker場合@table1
  4. に挿入するので、私は賢いコンディショニング何度も何度も、ストアドプロシージャの上にコールし、私はすべてのリストをしたいが、賢明なコンディショニングいくつかの選択クエリを行うと、@table1

に挿入それは時間がかかりますので、私はロールの名前で最後の列でロールを持つ1つのテーブルで一度にすべてを取る場合私は考えていたので、私は来る結果で条件を行うことができますが、それはtable1です。

それを行う方法を知っている人なら、私には役に立ちますので、それにお答えください!

注:すべての選択クエリの結果は、私がtable1を作成したのと同じです。

+0

あなたドンバックエンド側で

は、あなたが使用することを好む、これまでどのようなサーバ側は、あなたがよりエンティティフレームワークまたは任意の方法を使用して役割賢明なデータを取ることができることを意味します件名にdbmsが正しくタグ付けされているので、言及する必要はありません。 – jarlh

+1

おそらくストアドプロシージャを変更する必要があります。おそらく私たちがそのコードを見ることができたら、それを手伝うことができます。 –

+0

あなたの質問は詳細ですが、いくつかのサンプルデータを提供し、そのサンプルデータで達成しようとしていることを説明しても問題ありません。 – Viki888

答えて

2

ような何かあなたはすでにあなたが書かれているような役割を除くすべてのクエリに変化がない場合だけの@ TABLE1に挿入して、あなたの選択クエリを作成し、テーブルの@ TABLE1

を宣言してきたように。

例:

Insert into @table1 
your query where Role = Admin 
Insert into @table1 
your query where Role = Employee 
Insert into @table1 
your query where Role = Accountant 
Insert into @table1 
your query where Role = Worker 

それともあなたにも下に使用することができます - 優れた労働組合と挿入してmuliptle select文を経由して結果セットを収集するため

Insert into @table1 
your query where Role = Admin 
UNION ALL 
your query where Role = Employee 
UNION ALL 
your query where Role = Accountant 
UNION ALL 
your query where Role = Worker 

秒が推奨されます(推奨Jibinの答え)単一のステートメントで、複数の挿入よりも速いので、これにより、すべての詳細を1つのテーブルに入れることができます。

EX使用してエンティティフレームワーク:

var data = db.storedprocedurename("parameter").ToList(); 
var adminData = data.where(r => r.Role == "Admin") 
var accoutantData = data.where(r => r.Role == "Accountant") 
var employeeData = data.where(r => r.Role == "Employee") 
var workerData = data.where(r => r.Role == "Worker") 
+0

あなたの答えやJibinの答えを使うのは混乱していますが、あなたが書いたように質問してから私は試しています。ありがとうございました –

+0

私はあなたを喜んで支援します。 –

+1

また、Jibinの答えを使用することもできます。なぜなら、muliptle select文を使用して結果セットを収集し、複数の挿入よりも速い単一の文で挿入することが良いからです。 –

1

すべての結果セットのUNIONを作成し、@table1に挿入します。

Insert into @table1 
your 1st select query with extra column role 
UNION ALL 
your 2nd select query with extra column role 
UNION ALL 
your 3rd select query with extra column role 
UNION ALL 
your 4th select query with extra column role 
+0

本当にあなたは答えてくれてうれしいですが、 MVの答えの答えを使うのが混乱していますが、私はMVの答えのように質問してから試しています。ありがとう –

+1

@ padhiyar:わからない。ストアドプロシージャを使用することを決めた理由、または一時テーブルを決定した理由はわかりません。おそらく、単純なクエリを使うだけで十分でしょう。おそらくビュー。たぶんあなたの別のクエリはあまり大きく異なるわけではないので、それらをより小さくて速いクエリでマージすることができます。だから答えは:それは依存している。あなたが0MV1の答えでうまくいけば、それを読解可能で適切なものにしてから、それを知ってください。目標を達成するには、しばしばいくつかの方法があります。あなたが理解して好きな解決策を考えてください。 –

+0

@JibinBalachandranがガイドに感謝しますが、差し替えの代わりにUninonをすべて使用するとどうなりますか?時間がかかったり、大きな違いがありますか? –

関連する問題