0

我有一个 SQL 表列表(列表可以更改),我想将其转置并保存到带有 2 个字段(名称和值)的 ac# 列表中。

例如:表地址(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')

;

使用 unpivot 将列转换为行

从您的表 unpivot 中选择 Country_Code、年份、值(([1960]、[1961]、[1962]、[2011])中的年份值)u

您可以从下面的链接 http://sqlfiddle.com/#!3/1ea3b看到演示

于 2013-10-02T10:47:14.063 回答