我有一个结果集,它为我提供了2列名为Sequence
和CorrectAns
的列,它包含N行(现在100行是特定的)。
现在我想要的是将这100行划分为N列(现在为4列)。
那么,该怎么做?任何帮助将不胜感激。
这是我得到的结果。现在我想要的是这样的:
Seq ColA Seq ColB Seq ColC Seq ColD
1 C 4 A 7 C 10的d
2所述的5个C 8甲(11)C
3 A 6 A 9 C 12 A
等等。
希望这有帮助
答案 0 :(得分:1)
使用以下查询
SELECT *
FROM (
SELECT
Seq, CorrectAns,
gro
FROM your_table
) as t
PIVOT
(
SUM(gro)
FOR CorrectAns IN (A,B,C,D....)
)AS pvt
答案 1 :(得分:1)
您想要的是转移您的数据。除PIVOT
命令外,一种方法是使用条件聚合:
;WITH Cte AS(
SELECT *,
grp = (ROW_NUMBER() OVER(ORDER BY Seq) -1) %
(SELECT CEILING(COUNT(*) / (4 * 1.0)) FROM tbl)
FROM tbl
),
CteFinal AS(
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY grp ORDER BY Seq)
FROM Cte
)
SELECT
SeqA = MAX(CASE WHEN rn = 1 THEN Seq END),
ColA = MAX(CASE WHEN rn = 1 THEN CorrectAns END),
SeqB = MAX(CASE WHEN rn = 2 THEN Seq END),
ColB = MAX(CASE WHEN rn = 2 THEN CorrectAns END),
SeqC = MAX(CASE WHEN rn = 3 THEN Seq END),
ColC = MAX(CASE WHEN rn = 3 THEN CorrectAns END),
SeqD = MAX(CASE WHEN rn = 4 THEN Seq END),
ColD = MAX(CASE WHEN rn = 4 THEN CorrectAns END)
FROM CteFinal
GROUP BY grp
答案 2 :(得分:-2)
如果我理解你所说的清楚,你可以将结果集放在Array
中。
然后使用此SQL QUERY
ALTER TABLE table_name
ADD column_name datatype
示例:
ALTER TABLE customer ADD name VARCHAR(Max);
您可以指定从0到大小的循环,并将该查询放在循环中。
编辑: 好吧,我认为它应该是这样的;
DECLARE @cnt INT = 0;
DECLARE @str = "";
WHILE @cnt < 100000
BEGIN
SET @cnt = @cnt + 1;
SET @str='yourRowName';
ALTER TABLE yourTableName
ADD str datatype
END;
看看这个。 http://www.techonthenet.com/sql_server/loops/for_loop.php