我想在SQL Server中将表从行转换为列。
鉴于table1:
id value1 value2
1 name1 9
1 name1 26
1 name1 15
2 name2 20
2 name2 18
2 name2 61
我需要一张像这样的表:
id name1 name2
1 9 0
1 26 0
1 15 0
2 0 20
2 0 18
2 0 61
可以在这里转动帮助吗?由于表很大,因此首选进行转换是一种有效的方法。
我试过了:
select
id, name1, name2
from
(select
id, value1, value2
from table1) d
pivot
(
max(value2)
for value1 in (name1, name2)
) piv;
但是,它不能提供相同ID的所有行与0结合。
由于
答案 0 :(得分:1)
'秘密'是添加一列,以便为您的名称中的每一行提供唯一性。组。我使用了var opensea = false;
function search() {
var element = $(".search-toggle");
if(!opensea) {
menu_close();
element.addClass("active");
element.removeClass("hidden").addClass("expanded");
opensea = true;
} else {
search_close();
};
}
function search_close() {
$(".search-toggle .search").removeClass("expanded").addClass("hidden");
$(".search-toggle").removeClass("active");
opensea = false;
}
。虽然ROW_NUMBER
需要汇总,但我们的假设是独一无二的' MAX,MIN等就足够了。最后一部分是在外部选择中用0替换任何PIVOT
。
(顺便说一下,我们在2014年,所以我无法在2008年对此进行测试 - 道歉)
NULL
答案 1 :(得分:1)
您可以使用case based aggregation
group by
select id,
max(case when value1 ='name1' then value2 else 0 end) as name1,
max(case when value1 ='name2' then value2 else 0 end) as name2
from Table1
group by id, value1, value2