连接列和行

时间:2016-08-18 01:58:48

标签: sql

给出一个表格,例如:

Person

id, name, last_name, age

1, joshua,  smith,  33
2, melissa, fox,    65
3, james,   bond,   31
...

我必须从表中读取每一行,获取当前行,连接其列名和值,然后最后将它们作为新行放入另一个表中。 E.g:

新表中的

concat_row(varchar):

"name: joshua, last_name: smith, age: 33"
"name: melissa, last_name: fox, age: 65"
"name: james, last_name: bond, age: 31"
...

关键是,我需要使用通用查询,我不知道有多少列或它们的名称是什么,因为这个查询将用于数百个表...所以,它可能很有趣仅修改每个案例的表名。

1 个答案:

答案 0 :(得分:0)

您可以使用以下SQL并根据需要进行扩展,

USE AdventureWorks2014

DECLARE @OwnerName VARCHAR(50)
DECLARE @TblName VARCHAR(50)

SET @OwnerName = 'Sales'
SET @TblName = 'Customer'

DECLARE @Columns VARCHAR(MAX)

SET @Columns = ''

SELECT @Columns = @Columns + ('''' + Column_Name + ':'' + ISNULL(convert(VARCHAR(MAX),' + Column_Name + '),'''')   + '',  '' + ')
FROM (
    SELECT *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = @TblName
    ) A

--PRINT @Columns

DECLARE @FinalSelect VARCHAR(max)

SELECT @FinalSelect = 'Select ' + LEFT(@Columns, LEN(@Columns) - 10) + ' Contact_Row From ' + @OwnerName + '.' + @TblName

--print  @FinalSelect
EXEC (@FinalSelect)

输出是(前5行),

  

CustomerID:1,PersonID:,StoreID:934,TerritoryID:1,   账户号码:AW00000001,   rowguid:3F5AE95E-B87D-4AED-95B4-C3797AFCB74F,修订日期:9月12日   2014 11:15 AM CustomerID:2,PersonID:,StoreID:1028,TerritoryID:1,   账户号码:AW00000002,   rowguid:E552F657-A9AF-4A7D-A645-C429D6E02491,修订日期:9月12日   2014 11:15 AM CustomerID:3,PersonID:,StoreID:642,TerritoryID:4,   账户号码:AW00000003,   rowguid:130774B1-DB21-4EF3-98C8-C104BCD6ED6D,修订日期:9月12日   2014 11:15 AM CustomerID:4,PersonID:,StoreID:932,TerritoryID:4,   账户号码:AW00000004,   rowguid:FF862851-1DAA-4044-BE7C-3E85583C054D,修订日期:9月12日   2014 11:15 AM CustomerID:5,PersonID:,StoreID:1026,TerritoryID:4,   账户号码:AW00000005,   rowguid:83905BDC-6F5E-4F71-B162-C98DA069F38A,修订日期:9月12日   2014 11:15 AM