将N行除以N列

时间:2016-02-18 07:39:18

标签: sql sql-server

我有一个结果集,它为我提供了2列名为SequenceCorrectAns的列,它包含N行(现在100行是特定的)。

现在我想要的是将这100行划分为N列(现在为4列)。

那么,该怎么做?任何帮助将不胜感激。

enter image description here

这是我得到的结果。现在我想要的是这样的:

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

等等。

希望这有帮助

3 个答案:

答案 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命令外,一种方法是使用条件聚合:

SQL Fiddle

;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