Sql server T-SQL:在CTE的表结果中插入

Sql server T-SQL:在CTE的表结果中插入,sql-server,tsql,insert,common-table-expression,Sql Server,Tsql,Insert,Common Table Expression,我有以下TSQL语法: WITH cte AS( SELECT Stamps, row_number() over (order by (SELECT 1)) rn from week unpivot (Stamps FOR Day IN ([Sun], [Mon], [Tue], [Wed], [Thu], [Fri], [Sat]) ) AS unpvt ) SELECT Stamps + ': ' +STUFF((SELECT ','+cast(rn as varchar(9

我有以下TSQL语法:

WITH cte AS(
SELECT Stamps, row_number() over (order by (SELECT 1)) rn from week
unpivot      
(Stamps FOR Day IN ([Sun], [Mon], [Tue], [Wed], [Thu], [Fri], [Sat]) ) AS unpvt )

SELECT Stamps + ': ' +STUFF((SELECT ','+cast(rn as varchar(9)) from cte where Stamps=A.TimeStamps FOR XML PATH('')), 1 , 1 , '' ) from cte A group by Stamps
这给了我每个“邮票”一天的编号。 例如,如果表格为:

S2 | S0 | S0 | S1 | S1 | S3 | S2

结果将是:

S0 : 2,3
S1 : 4,5
S2 : 1,7
S3 : 6
这部分工作得很好,但现在我想把这个结果放在一个表中

Insert-Into-mytable(S0、S1、S2、S3)=('2,3','4,5','1,7','6')

但当我在之后或之前设置时,它不起作用。 我怎么做?
谢谢

我想你想把它转回来。这个怎么样:

WITH cte AS(
SELECT Stamps, row_number() over (order by (SELECT 1)) rn from week
unpivot      
(Stamps FOR Day IN ([Sun], [Mon], [Tue], [Wed], [Thu], [Fri], [Sat]) ) AS unpvt 
), cte2 AS (

SELECT Stamps , STUFF((SELECT ','+cast(rn as varchar(9)) 
                             from cte where Stamps=A.[Stamps] FOR XML PATH('')), 1 , 1 , '' ) 
  as DayList
from cte A
group by Stamps
)
INSERT MyTable (S0, S1, S2, S3)
select S0, S1, S2, S3 from cte2
PIVOT
(
Max(DayList)
FOR Stamps IN ([S0], [S1], [S2], [S3])
) AS PivotTable;

SQL Fiddle:

您不应该存储逗号分隔的值-它们很难处理,使编写常规查询变得困难,等等。如果它们实际上都表示相同的“类型”,那么看起来您已经在列名中嵌入了
S0
-
S3
它可以工作,但如果我插入其他值,如00、02。结果将为空。到目前为止我还不知道为什么。你有什么建议吗?在哪里插入其他值?我真的不明白这些“邮票”是什么,也不明白你想达到什么目的。