数据查询求帮忙
本帖最后由 limingyu831226 于 2012-12-03 11:29:59 编辑 表 A
ID BRID XM LX NR
1 001 张三 是否死亡 是
2 001 张三 死亡原因 骤停
3 001 张三 死亡时间 2012-12-21
4 001 张三 死亡地点 家
5 002 张四 是否死亡 是
6 002 张四 死亡原因 骤停
7 002 张四 死亡时间 2012-12-21
8 002 张四 死亡地点 家
查询结果
BRID XM 是否死亡 死亡原因 死亡时间 死亡地点
001 张三 是 骤停 2012-12-21 家
002 张四 是 骤停 2012-12-21 家
[最优解释]
----------------------------
-- Author :TravyLee(物是人非事事休,欲语泪先流!)
-- Date :2012-12-03 11:39:49
-- Version:
-- Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86)
--Feb 10 2012 19:13:17
--Copyright (c) Microsoft Corporation
--Enterprise Edition: Core-based Licensing on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------
--> 测试数据:[表A]
if object_id('[表A]') is not null drop table [表A]
go
create table [表A]
(
[ID] int,
[BRID] varchar(3),
[XM] varchar(4),
[LX] varchar(8),
[NR] varchar(10)
)
insert [表A]
select 1,'001','张三','是否死亡','是' union all
select 2,'001','张三','死亡原因','骤停' union all
select 3,'001','张三','死亡时间','2012-12-21' union all
select 4,'001','张三','死亡地点','家' union all
select 5,'002','张四','是否死亡','是' union all
select 6,'002','张四','死亡原因','骤停' union all
select 7,'002','张四','死亡时间','2012-12-21' union all
select 8,'002','张四','死亡地点','家'
go
/*
BRID XM 是否死亡 死亡原因 死亡时间 死亡地点
001 张三 是 骤停 2012-12-21 家
002 张四 是 骤停 2012-12-21 家
*/
select
BRID,
XM,
是否死亡=MAX(CASE WHEN [LX]='是否死亡' THEN [NR] ELSE '' END),
死亡原因=MAX(CASE WHEN [LX]='死亡原因' THEN [NR] ELSE '' END),
死亡时间=MAX(CASE WHEN [LX]='死亡时间' THEN [NR] ELSE '' END),
死亡地点=MAX(CASE WHEN [LX]='死亡地点' THEN [NR] ELSE '' END)
FROM
[表A]
GROUP BY
BRID,
XM
/*
BRID XM 是否死亡 死亡原因 死亡时间 死亡地点
---- ---- ---------- ---------- ---------- ----------
001 张三 是 骤停 2012-12-21 家
002 张四 是 骤停 2012-12-21 家
(2 行受影响)
*/
--CREATE TABLE A(ID INT, BRID VARCHAR(3), XM VARCHAR(10), LX VARCHAR(10), NR VARCHAR(10))
--INSERT INTO a
--SELECT 1, '001', '张三', '是否死亡' , '是'
--UNION ALL SELECT 2, '001', '张三', '死亡原因' , '骤停'
--UNION ALL SELECT 3, '001', '张三', '死亡时间', '2012-12-21'
--UNION ALL SELECT 4, '001', '张三', '死亡地点' , '家'
--UNION ALL SELECT 5, '002', '张四', '是否死亡', '是'
--UNION ALL SELECT 6, '002', '张四', '死亡原因', '骤停'
--UNION ALL SELECT 7, '002', '张四', '死亡时间', '2012-12-21'
--UNION ALL SELECT 8, '002', '张四', '死亡地点', '家'
DECLARE @s NVARCHAR(4000)
SET @s = ''
SELECT @s = @s + ',' + QUOTENAME(lx) + '=max(case when [lx]='
+ QUOTENAME(lx, '''') + ' then [nr] else ''0'' end)'
FROM a
GROUP BY lx
EXEC('select [brid],xm'+@s+' from a group by [brid],xm')
/*
brid xm 是否死亡 死亡地点 死亡时间 死亡原因
---- ---------- ---------- ---------- ---------- ----------
001 张三 是 家 2012-12-21 骤停
002 张四 是 家 2012-12-21 骤停
(2 行受影响)
*/