0

SQL Server を使用して、名前と値のペア テーブルを用意します。各行は基本的に、userid、contentid、sectionid、parameter、value です。そこで、ユーザー情報などテーブルに表示したいデータがあります。情報の各ビットはそれぞれの行にあります。それを DataSet に取得して Repeater で使用するにはどうすればよいでしょうか? どういうわけか行を1つにマージできますか? では、1 つの行で複数のパラメーター/値のペアを取得できますか?

以下のようなので...

ユーザー 32 の 2 つの行:

(param / value)
fname / Bob
lname / Smith

次のようにリピーターで 1 行に表示されます。

Bob Smith

何か案は?そうそう、名前/値のペア形式になっている理由は、必要な標準に準拠するためです。

4

4 に答える 4

1

多分何か...

SELECT fff.firstname, lll.lastname
FROM (
  SELECT ff.value AS firstname
  FROM PairTable AS ff
  WHERE ff.param = 'fname'
    AND ff.userId = 32
) fff, (
  SELECT ll.value AS lastname
  FROM PairTable AS ll
  WHERE ll.param = 'lname'
    AND ll.userId = 32
) lll
于 2009-05-27T03:01:31.777 に答える
0

嫌な標準.... :)

とにかく、最善の策は、ストアド プロシージャで魔法 (カーソル) を実行し、ストアド プロシージャから必要な形式でデータを返すことです。次に、DataSet または文字列リストへのバインドは簡単です。

于 2009-05-27T02:55:50.023 に答える
0

別の代替手段はPIVOTです。

このようなもの(現在SQL Serverがないためテストされていません)

SELECT UserID, [fname] AS firstname, [lname] AS lastname
FROM 
(SELECT UserID, value, name from PairTable WHERE UserID=32 ) p
PIVOT
(
value
FOR name IN
( [fname], [lname] )
) AS pvt
于 2009-05-27T03:06:22.187 に答える
0

そのテーブルはひどいです。悪意はありません;-)

リレーショナル データベースは、EAV テーブルをうまく処理できません。

次のように、グループ化して条件付き CASE ステートメントを実行することもできます。

SELECT   UserID,
         MAX(CASE WHEN param = 'fname' THEN value ELSE '' END) AS fname,
         MAX(CASE WHEN param = 'lname' THEN value ELSE '' END) AS lname
FROM     MyEAVTable
GROUP BY UserID

PIVOT 構文は優れています。このソリューションの唯一の利点は、SQL 2000 でも機能することです。

于 2009-05-27T03:24:47.563 に答える