6

请考虑这张表:

ID         Page          Line           C01          C02          C03        
---------------------------------------------------------------------
1          122            11             1            0            1
1          123            11             1            1            1
1          124            12             0            0            0
1          125            16             1            0            1
1          127            11             0            1            0

我想把这张表转换成这张:

ID         Page          Line           City         Value
-----------------------------------------------------------
1          122            11            C01            1           
1          122            11            C02            0  
1          122            11            C03            1  
1          123            11            C01            1  
1          123            11            C02            1  
1          123            11            C03            1  
...

我怎样才能以适当的方式做到这一点?

4

5 回答 5

9

使用 UNPIVOT。尝试类似:

SELECT ID, Page, Line, City, Value
FROM SourceTable
UNPIVOT
   (Value FOR City IN 
      (C01, C02, C03)
)AS unpvt;

其中“SourceTable”是您的源表名称。(注意:我目前无法对此进行测试,因此可能并不完全正确。)

此处的详细信息:http: //msdn.microsoft.com/en-us/library/ms177410 (v=sql.105).aspx

于 2012-07-04T05:50:25.853 回答
1

下面的查询应该满足您的要求。

SELECT ID, PAGE, LINE, "C01", C01 FROM TABLE
UNION 
SELECT ID, PAGE, LINE, "C02", C02 FROM TABLE
UNION
SELECT ID, PAGE, LINE, "C03", C03 FROM TABLE
于 2012-07-04T05:54:22.187 回答
1

Pivot & UnPivot 将解决这个问题 :)

按照链接:

于 2012-07-04T05:48:39.387 回答
1

您可以通过在 Linq to sql 中执行类似的操作来实现此目的

在 Linq to SQL 中是否提供 Unpivot(非 Pivot)功能?如何?

于 2012-07-04T06:05:36.207 回答
0

执行一次自连接,每 1+N 列一次。并创建一个笛卡尔表。

自连接是将同一个表连接到自身。通过 id、page 和 line 匹配它。

于 2012-07-04T05:46:08.533 回答