我想基于给定的表填充表格:
给出表t1:
id1 (string), id2 (string), value (float)
tyb uanwe_A 6963
tyb uanwe_B 979
tyb uanwe_C 931
我需要:
id1, id2, vA, vB, vC
tyb uanwe 6963 979 931
我的SQL服务器查询:
select case substring(id2, 6, 1)
when 'A' then [value]
end as [vA]
from t1
但是,这对我不起作用,因为在子串(id2,6,1)不是'A'的情况下我得到了很多“null”。
select case substring(id2, 6, 1)
when 'A' then [value] end as [vA]
when 'B' then [value] end as [vB]
when 'C' then [value] end as [vC]
end
from t1
我觉得错误:
Incorrect syntax near the keyword 'when'.
任何帮助都将不胜感激。
答案 0 :(得分:2)
我希望这会对你有所帮助
declare @temp table
(id1 nvarchar(99), id2 nvarchar(99), value int)
insert into @temp values ('tyb','uanwe_A',6963)
insert into @temp values ('tyb','uanwe_B',979 )
insert into @temp values ('tyb','uanwe_C',931 )
select id1, substring(id2,1, 5) id2,
max(case substring(id2,7, 1)
when 'A' then value end) vA,
max(case substring(id2,7, 1)
when 'B' then value end) vB,
max(case substring(id2,7, 1)
when 'C' then value end) vC
from @temp GROUP BY id1,substring(id2,1, 5)
答案 1 :(得分:1)
尝试PIVOT
<强> SQL Fiddle Demo 强>
-- Pivot table with one row and five columns
SELECT [id1], [uanwe_A], [uanwe_B], [uanwe_C]
FROM
( SELECT [id1], [id2], [value]
FROM table1) AS SourceTable
PIVOT
(
AVG([value])
FOR [id2] IN ([uanwe_A], [uanwe_B], [uanwe_C])
) AS PivotTable;
<强>输出强>
我添加了另一个id1以使示例更清晰
| id1 | uanwe_A | uanwe_B | uanwe_C |
|-----|---------|---------|---------|
| tyb | 6963 | 979 | 931 |
| tyC | 111 | 222 | 333 |