2010-12-20 9 views
2

可能性の重複:
Is there a way to create a SQL Server function to "join" multiple rows from a subquery into a single delimited field?SQL動的列クエリ

私は "イベント" の表を持っており、各イベントは、「1-4(本質的変数#)のAAリストを持っていますユーザー "。つまり、今日のイベントをすべて取得した後、繰り返される行ではなく動的な列数としてユーザーをリストしたいとします。イベントIDと時間のためしかし、重複(複数の列が中にありますが、私はこれで動作することができ、それは許容だ

EventID, Time, Name 
211, '4:00am', 'Joe' 
211, '4:00am', 'Phil' 
211, "4:00am', 'Billy' 
218, '7:00am', 'Sally' 
218, '7:00am', 'Susan' 

今私は

SELECT E.EventID, E.Time, U.Name FROM Events 
INNER JOIN Users U ON E.UserID = U.UserID 
WHERE Date = '12/20/2010' 

を持っているこれは、ように私は結果をもたらします私の実際のクエリ)は私にとって無駄に見えます。私が本当に出力のように、このあるでしょう:私は(私はSQL 2008を持っている)ピボットのためのチュートリアルを見て試してみましたが、彼らは概念的に、私がやろうとしているものと一致した場合、私は知らない

EventID, Time, Name1, Name2, Name3 
211, '4:00am', 'Joe', 'Phil', 'Billy' 
218, '7:00am', 'Sally', 'Susan', NULL 

。彼らのほとんどは「MIN」または「MAX」を使用しています。

これはできないのでしょうか?私の他の選択肢は、今日のイベントのリストを取得し、それをループして、そのイベントのユーザーのレコードセットを見つけることです。私はそれを1つのクエリですべて取得することを好むだろう。

アイデア?

+0

テーブルのスキーマを変更できますか?私は 'EventID Time Name1 Name2 Name3'を' Events'に保存してから、各ユーザが持つeventIDを単純に選択します。ユーザーは複数のイベントを持つことができ、eventIDは外部キーです。 – Robert

+0

MySQLのGROUP_CONCAT()を思い出させます。この質問w.r.t. MSSQLのヘルプ? http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-mssql – Riedsio

+0

名前をまとめて区切られた単一の列にまとめることができます。だからあなたは: EventID、時間、名前 211、 '4:00 am'、 "Joe、Phil、Billy" – Adam

答えて

2

可変数の列を返すことは、コードを扱うのが難しくなります。現在取得している結果セットは、コード内で価値のあるオブジェクトに変換するのが簡単です。

出力をどうしていますか?

+0

これはまさに私が考えていたものです。これを動的SQLで行うことはできますが、やりたいことはありますか? –

+0

それは、潜在的に...そのクエリに戻ってくる200〜300の行があるということだけです。このページはたくさん呼ばれているので、私は各クエリで取得しているデータの量を最小限に抑えたいと思っていました。 – MikeMurko