TSQL 将多列中的值连接成一列中的字符串
TSQL Concatenate values from multiple columns into string in one column
我有一个似乎可以解决的问题,但我现在没有正确的想法。
我有一个 table 有多个列,列名中有日期。这些名称将会更改,因此我可能需要一个动态代码。这是 table 的样子:
ID 2014-01-01 2014-01-02 2014-01-03 2014-01-04 2014-01-05 2014-01-06 (...) 2014-12-31
1 1 0 1 0 0 0 1
2 1 1 1 1 1 1 1
3 1 1 0 1 1 1 0
4 1 0 0 1 1 1 1
5 1 1 0 0 0 1 1
(...)
因此,存在逻辑值为 0
或 1
的日期序列。我需要的是向该集合添加另一列,其中包含这些值的序列作为字符串,例如(对于 ID = 1):
101000(...)1
正如我提到的,日期可能会发生变化。
在那种情况下你能帮我吗?
我想,您需要动态 SQL 来实现:
DECLARE @sql NVARCHAR(MAX)
DECLARE @tablename NVARCHAR(128) = 'FUNKTIONEN'
SET @sql = (
SELECT 'CONVERT(NVARCHAR(max),ISNULL('+ name + ','''')) + '
FROM sys.all_columns
WHERE object_id = (
SELECT object_id
FROM sys.all_objects
WHERE object_id = object_id(@tablename)
) FOR XML PATH (''))
SET @sql = 'SELECT TOP 1 ' + LEFT(@sql,LEN(@sql)-1) + 'FROM ' + @tablename
EXECUTE sp_executesql @sql
我有一个似乎可以解决的问题,但我现在没有正确的想法。
我有一个 table 有多个列,列名中有日期。这些名称将会更改,因此我可能需要一个动态代码。这是 table 的样子:
ID 2014-01-01 2014-01-02 2014-01-03 2014-01-04 2014-01-05 2014-01-06 (...) 2014-12-31
1 1 0 1 0 0 0 1
2 1 1 1 1 1 1 1
3 1 1 0 1 1 1 0
4 1 0 0 1 1 1 1
5 1 1 0 0 0 1 1
(...)
因此,存在逻辑值为 0
或 1
的日期序列。我需要的是向该集合添加另一列,其中包含这些值的序列作为字符串,例如(对于 ID = 1):
101000(...)1
正如我提到的,日期可能会发生变化。
在那种情况下你能帮我吗?
我想,您需要动态 SQL 来实现:
DECLARE @sql NVARCHAR(MAX)
DECLARE @tablename NVARCHAR(128) = 'FUNKTIONEN'
SET @sql = (
SELECT 'CONVERT(NVARCHAR(max),ISNULL('+ name + ','''')) + '
FROM sys.all_columns
WHERE object_id = (
SELECT object_id
FROM sys.all_objects
WHERE object_id = object_id(@tablename)
) FOR XML PATH (''))
SET @sql = 'SELECT TOP 1 ' + LEFT(@sql,LEN(@sql)-1) + 'FROM ' + @tablename
EXECUTE sp_executesql @sql