0

転置し、2 つのフィールド (名前と値) を持つ ac# リストに保存する SQL テーブル (リストは変更可能) のリストがあります。

例: table Addresses (Id int、DocId int、Type int、StreetName varchar、StreetNo int) -- 他のテーブルには他のデータ型があります。

SELECT Id , DocId, Type , StreetName , StreetNo FROM Addresses WHERE DocId = 2

これにより、転置したい複数のレコードが生成されます。 ここに画像の説明を入力 Q1:テーブルを転置するときの最善のアプローチは何ですか?

1.SQL転置。列は変換(CAST)する必要がありますが、読みやすくするために:

  SELECT  Field, Value FROM 
     ( SELECT Id, DocId, Type, StreetName, StreetNo FROM Addresses WHERE DocId = 2) p 
  UNPIVOT
     (Value FOR Field IN (Id, DocId, Type, StreetName, StreetNo)) AS unpvt

2. C# 転置。テーブルは転置されずに送信されます。

            foreach (string tb in Tables)
            {                    
                var results = context.Database.SqlQuery("SELECT * FROM "+ tb +" WHERE DocId = 2");
                //Transpose results. 
            }
4

1 に答える 1

1

テーブルの作成

CREATE TABLE yourtable ([Country_Code] varchar(3), [1960] varchar(4), [1961] varchar(4), [1962] varchar(4), [2011] varchar(4)) ;

INSERT INTO yourtable ([Country_Code], [1960], [1961], [1962], [2011]) VALUES ('IND', 'va11', 'va12', 'va13', 'va1x'), ('AUS '、'va21'、'va22'、'va23'、'va2x')、('ENG'、'va31'、'va32'、'va33'、'va3x')

;

アンピボットを使用して列を行に変換する

select Country_Code, year, value from yourtable unpivot ( value for year in ([1960], [1961], [1962], [2011]) ) u

以下のリンクからデモを見ることができます http://sqlfiddle.com/#!3/1ea3b

于 2013-10-02T10:47:14.063 に答える