现在复杂了点,我试了多次不行,大哥看看,我只有90分了
请教一个问题
怎样将表
ID 电价类型 电量 电费
001 A 1 10
001 B 2 20
001 C 3 30
002 A 1 10
002 B 1 10
002 C 2 20
003 A 1 10
003 B 3 30
003 C 1 10进行查询得出
ID A1 A2 B1 B2 C1 C2
001 1 10 2 20 3 30
002 1 10 1 10 2 20
003 1 10 3 30 1 10
请教一个问题
怎样将表
ID 电价类型 电量 电费
001 A 1 10
001 B 2 20
001 C 3 30
002 A 1 10
002 B 1 10
002 C 2 20
003 A 1 10
003 B 3 30
003 C 1 10进行查询得出
ID A1 A2 B1 B2 C1 C2
001 1 10 2 20 3 30
002 1 10 1 10 2 20
003 1 10 3 30 1 10
create table 表(ID char(3), 电价类型 char(1), 电量 integer, 电费 integer)
insert into 表
select
'001', 'A', 1 , 10
union select
'001', 'B', 2 , 20
union select
'001', 'C', 3 , 30
union select
'002', 'A' , 1 , 10
union select
'002', 'B' , 1 , 10
union select
'002', 'C', 2 , 20
union select
'003', 'A', 1 , 10
union select
'003', 'B', 3 , 30
union select
'003', 'C' , 1 , 10select * from 表--动态查询
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT ID'
SELECT @SQL= @SQL+ ',max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电量 END) [' + 电价类型 + '电量]
,max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电费 END) [' + 电价类型 + '电费]'
FROM (SELECT DISTINCT 电价类型 FROM 表) A
SET @SQL=@SQL+ ' FROM 表 GROUP BY ID'
EXEC (@SQL)
--删除测试环境
drop table 表
怎样将表
ID 电价类型 电量 电费 村名 供电所
001 A 1 10 张村 赵镇供电所
001 B 2 20 张村 赵镇供电所
001 C 3 30 张村 赵镇供电所
002 A 1 10 李村 赵镇供电所
002 B 1 10 李村 赵镇供电所
002 C 2 20 李村 赵镇供电所
003 A 1 10 王村 赵镇供电所
003 B 3 30 王村 赵镇供电所
003 C 1 10 王村 赵镇供电所进行查询得出
ID A1 A2 B1 B2 C1 C2 村名 供电所
001 1 10 2 20 3 30 张村 赵镇供电所
002 1 10 1 10 2 20 李村 赵镇供电所
003 1 10 3 30 1 10 王村 赵镇供电所
SET @SQL='SELECT ID,村名,供电所'
SELECT @SQL= @SQL+ ',max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电量 END) [' + 电价类型 + '电量]
,max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电费 END) [' + 电价类型 + '电费]'
FROM (SELECT DISTINCT 电价类型 FROM 表) A
SET @SQL=@SQL+ ' FROM 表 GROUP BY ID村名,供电所'
EXEC (@SQL)
在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
--建立测试表
create table 表(ID char(3), 电价类型 char(1), 电量 integer, 电费 integer,村名 char(30),供电所 char(30))
insert into 表
select
'001', 'A', 1 , 10,'张村' , '赵镇供电所'
union select
'001', 'B', 2 , 20,'张村' , '赵镇供电所'
union select
'001', 'C', 3 , 30,'张村' , '赵镇供电所'
union select
'002', 'A' , 1 , 10,'王村' , '赵镇供电所'
union select
'002', 'B' , 1 , 10,'王村' , '赵镇供电所'
union select
'002', 'C', 2 , 20,'王村' , '赵镇供电所'
union select
'003', 'A', 1 , 10,'李村' , '赵镇供电所'
union select
'003', 'B', 3 , 30,'李村' , '赵镇供电所'
union select
'003', 'C' , 1 , 10,'李村' , '赵镇供电所'select * from 表--动态查询
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT ID,村名,供电所'
SELECT @SQL= @SQL+ ',max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电量 END) [' + 电价类型 + '电量]
,max(CASE WHEN 电价类型 = ''' + 电价类型 + ''' THEN 电费 END) [' + 电价类型 + '电费]'
FROM (SELECT DISTINCT 电价类型 FROM 表) A
SET @SQL=@SQL+ ' FROM 表 GROUP BY ID,村名,供电所'
EXEC (@SQL)--删除测试环境
drop table 表