Col1 |Col2 |Col3 |Col4 | Col5
----------------------------------
hi | this | is | a | test
目的地表
RowValues|
----------
hi
this
is
a
test
我正在使用动态SQL。 有什么帮助吗?
这是我的代码,只需将表格名称和where子句中的Id更改为适合您的
DECLARE @sql nVARCHAR(max), @TableName nvarchar(100), @where nvarchar(max)
set @TableName = 'stockItems'
set @where= ' where id = 2'
select @sql ='Select '
select @sql = @sql+ + ' '''+ [name] +' = ''+ cast(' + [name] + ' as nvarchar(10)) as '+[name]+', '
from sys.columns where object_name (object_id) = @TableName
set @sql = stuff(@sql, len(@sql), 1, '') + ' From '+@TableName+ @where
print @sql
set @sql = REPLACE(@sql,', From',' From')
set @sql = @sql + ' '
print @sql
exec(@sql)
现在我需要创建一个新表,其中有一列保持将每个值保存为行
感谢@ Mahmoud-Gamal 解决方案应该如下所示
declare @cols nvarchar(max)
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(column_name)
FROM information_schema.columns
WHERE table_name = 'vehicles'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
declare @statement nvarchar(max)
set @statement ='
SELECT
ColumnName, Value
FROM
Vehicles
UNPIVOT
(
Value
FOR ColumnName
IN
(
'+@cols+'
)
)
AS A'
execute(@statement)
请将“vehicle”表名更改为数据库中包含不同类型(datetime,int和nvarchar)列的任何表,并显示以下错误 有帮助吗? “描述”列的类型与UNPIVOT列表中指定的其他列的类型冲突。
答案 0 :(得分:4)
使用UNPIVOT
表格运算符:
SELECT col AS RowValues
FROM table1 AS t
UNPIVOT
(
col
FOR value IN([col1],
[col2],
[col3],
[col4],
[col5])
) AS u;
这会给你:
| ROWVALUES |
|-----------|
| hi |
| this |
| is |
| a |
| test |
如果您不知道列的名称,并且想要动态执行此操作,则必须使用动态SQL执行此操作。
但问题是如何获取列名?
你可以从information_schema.columns
获取列名,然后在一个sql中连接它们,然后用这个字符串替换UNPIVOT
中的列名,并像这样动态执行该语句:< / p>
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(column_name)
FROM information_schema.columns
WHERE table_name = 'Table1'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
SELECT @query = ' SELECT col AS RowValues
FROM table1 AS t
UNPIVOT
(
val
FOR col IN ( ' + @cols + ' )
) AS u;';
EXECUTE(@query);
答案 1 :(得分:0)
我相信你想要这个
Select Col1 + Col2 + Col3 + Col4 + Col5 From Table
或者可能正在关注
Select Col1 From Table1
union Select Col2 From Table1
union Select Col3 From Table1
union Select Col4 From Table1
union Select Col5 From Table1 ;