日期:2014-05-17  浏览次数:20562 次

数据查询求帮忙
本帖最后由 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   是否死亡       死亡原因