SQL Server将表列值转换为名称,如果没有列值,则将0分配给新列

时间:2016-02-10 00:50:25

标签: sql sql-server sql-server-2008

我想在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结合。

由于

2 个答案:

答案 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

SQL Fiddle

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