将行旋转到列

时间:2018-01-25 18:28:31

标签: sql sql-server pivot pivot-table

以下是我的原始数据: raw data

我希望数据如下所示:pivoted data

select cvid, cid,67554,67555,67556,67557 
from #temp2 pivot
    (
    max(lcd)
    for qid in ([67554],[67555],[67556],[67557])
    )as P

这是我试过的代码。需要帮助!

3 个答案:

答案 0 :(得分:2)

两件事:确保您有一个可以转动的源表。源表将包含您要聚合的列。在这种情况下,我已经给它了别名' src'。其次,当您使用数字作为列名称时,请确保使用括号。或者,使用字母开始列名称。例如,[67554]为Col_67554。我在代码中提供了这个例子。

select cvid, cid,[67554] as Col_67554,[67555],[67556],[67557] 
    from 
    (select cvid, cid, lcd, qid from #temp2) as src
    pivot
    (
    max(lcd) for qid in ([67554],[67555],[67556],[67557])
    ) p

答案 1 :(得分:2)

这是一种可能性,使用相当通用的语法:

function getPerms(str, depth=0) {
    var words = [];
    var permutations = [];

    if(str.length == 0) {
        permutations.push("");
        return permutations;
    }
    var first = str.charAt(0);//get the first char
    var reminder = str.slice(1);//remove the first char
    words = getPerms(reminder, depth+1);
    for(var i = 0; i < words.length; i++) {
        for(var j = 0; j <= words[i].length; j++) {
            var s = insertCharAt(words[i], first, j);
            permutations.push(s);
        }
    }
    return permutations;
}

function insertCharAt(word, c, i) {
    var start = word.slice(0, i);
    var end = word.slice(i);
    var result = start + c + end;
    return result;
}

console.log(getPerms("abc"));

我在SSMS for SQL Server 2012中进行了测试。

答案 2 :(得分:2)

如果您使用的是Oracle SQL,请尝试

select * from (
    select cvid, cid, qid, lcd
    from #temp2
) a
pivot
(
    max(lcd)
    for qid in (67554,67555,67556,67557)
) b
order by cvid;