将表格格式数据转换为SQL Server中的列表格式

时间:2016-05-20 12:03:27

标签: sql-server sql-server-2012

我的类别表中有以下数据。

当我从类别I中选择*时,我会得到这样的数据。这个表有10多列

CategoryId CategoryName c3 c4 .....c10 
1           aaa 
2           bbb
3           ccc
...
...

我想显示这样的数据。我不知道如何为此准备SQL。

CategoryId  1
CategoryName aaa
C3 
...
...
C10
CategoryId  2
CategoryName bbb
C3 
...
...
C10
CategoryId  3
CategoryName ccc
C3 
...
...
C10

...

请建议我任何想法。

1 个答案:

答案 0 :(得分:1)

你可以使用像这样的Cross Apply来实现它 -

DECLARE @OutItem TABLE 
(
    CategoryId INT,
    CategoryName varchar(10),
    c3 varchar(10)
)

INSERT INTO @OutItem
    VALUES (1,'aaa', 'c31'),
(2,'bbb', 'c32'),
(3,'ccc', 'c33')


SELECT ca.* from @OutItem
CROSS APPLY (
    VALUES ('CategoryId', CAST(CategoryId AS VARCHAR)),
        ('CategoryName', CategoryName),
        ('C3', c3)
        --, Add your 10 columns here same as above
) ca (TabCol, TabVal)

<强>结果

TabCol      TabVal
===================
CategoryId    1
CategoryName  aaa
C3            c31
CategoryId    2
CategoryName  bbb
C3            c32