2

現在、行データが動的に挿入されるテーブルをピボットするコードがあります。コードを以下に示します。

CREATE TABLE Table1
     ([empname] varchar(6), [empqual] varchar(10), [emprank] int, [empexp] int)


INSERT INTO Table1
     ([empname], [empqual], [emprank], [empexp])
VALUES
     ('Joyce', 'UNIVERSITY', 1, 11),
     ('Angela', 'MASTERS', 2, 10),
     ('Lily', 'MASTERS', 3, 9),
     ('Sasha', 'UNIVERSITY', 3, 9),
     ('Harry', 'UNIVERSITY', 3, 9)

DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',' + 'Column' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank))
        FROM Table1 c
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

SET @query = '
 SELECT * 
 FROM 
 (
   SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
   CONVERT(VARCHAR,empname) as e 
   FROM Table1 
 ) p
 PIVOT
 (
   MAX (e)
   FOR Columns IN
   ( 
     ' + @cols + ' )
   ) as pvt

 UNION

 SELECT * 
 FROM 
 (
   SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
   CONVERT(VARCHAR,empqual) as e 
   FROM Table1 
 ) p
 PIVOT
 (
   MAX (e)
   FOR Columns IN
   ( 
     ' + @cols + ' )
   ) as pvt

 UNION

 SELECT * 
 FROM 
 (
   SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
   CONVERT(VARCHAR,emprank) as e 
   FROM Table1 
 ) p
 PIVOT
 (
   MAX (e)
   FOR Columns IN
   ( 
      ' + @cols + ' )
   ) as pvt

 UNION 

 SELECT * 
 FROM 
 (
   SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
   CONVERT(VARCHAR,empexp) as e, 
   FROM Table1 
 ) p
 PIVOT
 (
   MAX (e)
   FOR Columns IN
   ( 
      ' + @cols + ' )
   ) as pvt
 '
EXECUTE (@query)

上記のコードの結果は次のようになります。

  Column1    Column2    Column3    Column4    Column5
     1          2          3          3          3
    11         10          9          9          9
   Joyce      Angela      Lily      Sasha      Harry
 UNIVERSITY   MASTERS    MASTERS  UNIVERSITY  UNIVERSITY

さて、私のアプリケーションでは、このテーブルの各列を個別に表示する必要があります。つまり、このテーブルの行ではなく各をこのテーブルからエクスポートし、おそらく一時テーブルに転送する必要があります。簡単に表示できます。

リレーショナル DB が、列ではなく行を個々のエンティティと見なすように設計されていることはよく知っています。ただし、私が作業しているアプリケーションには制約があります。このアプリケーションでは、このテーブルのデータを列ごとに抽出して個別に表示できるようにするコードが必要です。

どうすればこれを行うことができますか?

4

1 に答える 1

0

これは用語の重複です。

  • SQL では、「行」は (大まかに) 単一のエンティティを意味し、「列」はエンティティのプロパティを意味します。
  • UI では、「行」は横に並べられたデータを意味し、「列」は縦に並べられたデータを意味します。

あなたの要件は、エンティティを垂直に表示することです。したがって、エンティティ (SQL) を取得し、アプリケーションにコードを追加して、このデータを UIに表示します。ここで用語が同じであることは残念であり、混乱を招く可能性がありますが、データベース構造 (および用語の選択) は UI レイアウトとはまったく無関係であることを覚えておいてください。

データを表示するためにアプリケーション内のどのコードが必要かということについては...まあ、それがどの言語で書かれているかさえ教えてくれなかったので、私はそれを手伝うことはできません.

于 2013-07-26T11:07:20.470 に答える