2012-03-27 4 views
1

私はこのテーブルにデータがどのように保存されるかを制御できません。しかし、私はテーブルを照会し、同様のpn_idカラムのデータを1つの行/レコードとして結合する必要があります。クエリ行ベースのテーブル

次のように例えば現在のデータ構造があり、

ここ

enter image description here

我々は別の質問のIDを持つ繰り返し同じpn_idを持っています。これは実際には1つのpn_idとして保存されているはずです。しかし、私はこのような一つのレコードとして、以下のデータを取得する必要があり、この..これは

enter image description here

任意のアイデアを行うことができますか?

ありがとうございました

+0

することは、私はC#で、それを自分自身をコーディングしたいです。それほど複雑ではありません。 – phoog

+0

あなたが表示するデータには、すべてのpn_idに独自のquestion_idsがありますが、question_id 152と他の質問との間には何らかの関係がありますか?または、300個の異なるquestion_idがある場合は、各行に300個のカラムが必要です。与えられたpn_idにその質問IDがない場合はnullを返します。 PIVOTキーワードを使用せずに、CASE文を使用して任意のSQLでピボットすることができます。 –

+0

はい私はこのテーブルのレコードを列にデータを持ち、C#datagridviewの1つのレコードとして表示する他のテーブルと結合したいので、値が300の列を必要とします。この場合、CASEステートメントの使用方法を確認します。しかし、これまでのところ、このリンクが見つかりました。これは最初は問題を解決するはずですが、今晩後半にこれを使う予定です。 http://groups.google.com/group/sybase.public.sqlanywhere.general/browse_thread/thread/81792ce38b3817e2?pli=1 – MStp

答えて

2

ここに、変換アルゴリズムの疑似コードがあります。データセット全体を2回スキャンする必要があることに注意してください。たとえば、入力データをソートすることができる場合など、効率を向上させるその他の機会がいくつかあります。また、擬似コードなので、null値の処理を追加していません。

var columnNames = new HashSet<string> { "pn_id" }; 

foreach (var record in data) 
    columnNames.Add(record.question_id.ToString()); 

var table = new DataTable(); 
foreach (var name in columnNames) 
    table.Columns.Add(new DataColumn(name, typeof(string))); 

foreach (var record in data) 
{ 
    var targetRecord = CreateNewOrGetExistingRecord(table, record.pn_id); 
    targetRecord[record.question_id.ToString()] = record.char_value ?? record.date_value.ToString(); 
} 

そして、ここでヘルパーメソッドのスケッチです:Sybaseは、ピボット操作をサポートdoes't場合

DataRow CreateNewOrGetExistingRecord(DataTable table, object primaryKeyValue) 
{ 
    var result = table.Find(primaryKeyValue); 
    if (result != null) 
     return result; 

    //add code here to create a new row, add it to the table, and return it to the caller 
} 
+0

を共有していただきありがとうございます。 – MStp

2

構造は問題ありません。新しい質問が追加されるたびに新しい列を追加する必要があるため、質問ごとに1つの列を持つことは理にかなっていません。

あなたの問題はPIVOTで簡単に解決できます。 thisを参照してください。

+0

PIVOTがSybaseでサポートされているとは思わない – Ben

+0

DBを明確にするためには、Sybase SQL Anywhere 9.01(ASA 9.01) – MStp

関連する問題