34,590
社区成员
发帖
与我相关
我的任务
分享
DECLARE @TB TABLE([id] INT, [dir] VARCHAR(11), [c_name] VARCHAR(7), [value] VARCHAR(5))
INSERT @TB
SELECT 625, '18376_18022', 'N1', '1_74' UNION ALL
SELECT 625, '18376_18022', 'N1RXLEV', '48' UNION ALL
SELECT 625, '18376_18022', 'N2', '15_70' UNION ALL
SELECT 625, '18376_18022', 'N2RXLEV', '33' UNION ALL
SELECT 625, '18376_18022', 'N3', '75_76' UNION ALL
SELECT 625, '18376_18022', 'N3RXLEV', '39' UNION ALL
SELECT 625, '18376_18022', 'N4', '76_' UNION ALL
SELECT 625, '18376_18022', 'N4RXLEV', '30' UNION ALL
SELECT 625, '18376_18022', 'N5', '77_71' UNION ALL
SELECT 625, '18376_18022', 'N5RXLEV', '32' UNION ALL
SELECT 625, '18376_18022', 'N6', '78_73' UNION ALL
SELECT 625, '18376_18022', 'N6RXLEV', '44'
SELECT id,dir,
MIN(c_name) AS c_name,
MAX(CASE WHEN RIGHT(c_name,5)<>'RXLEV' THEN value END) AS value,
MAX(CASE WHEN RIGHT(c_name,5)='RXLEV' THEN value END) AS RXLEV
FROM @TB
GROUP BY id,dir,LEFT(c_name,2)
/*
id dir c_name value RXLEV
----------- ----------- ------- ----- -----
625 18376_18022 N1 1_74 48
625 18376_18022 N2 15_70 33
625 18376_18022 N3 75_76 39
625 18376_18022 N4 76_ 30
625 18376_18022 N5 77_71 32
625 18376_18022 N6 78_73 44
*/
--结果:
(12 行受影响)
id dir c_name value RXLEX
----------- ----------- ------ ----- -----
625 18376_18022 N1 1_74 48
625 18376_18022 N2 15_70 33
625 18376_18022 N3 75_76 39
625 18376_18022 N4 76_ 30
625 18376_18022 N5 77_71 32
625 18376_18022 N6 78_73 44
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (id int,dir varchar(11),c_name varchar(7),value varchar(5))
insert into [tb]
select 625,'18376_18022','N1','1_74' union all
select 625,'18376_18022','N1RXLEV','48' union all
select 625,'18376_18022','N2','15_70' union all
select 625,'18376_18022','N2RXLEV','33' union all
select 625,'18376_18022','N3','75_76' union all
select 625,'18376_18022','N3RXLEV','39' union all
select 625,'18376_18022','N4','76_' union all
select 625,'18376_18022','N4RXLEV','30' union all
select 625,'18376_18022','N5','77_71' union all
select 625,'18376_18022','N5RXLEV','32' union all
select 625,'18376_18022','N6','78_73' union all
select 625,'18376_18022','N6RXLEV','44'
select id,dir,c_name=left(c_name,2),
[value]=max(case when charindex('rxlev',c_name)>0 then '' else [value] end),
RXLEX=max(case when charindex('rxlev',c_name)>0 then [value] else '' end)
from [tb]
group by id,dir,left(c_name,2)