当前位置: 代码迷 >> Sql Server >> 查询语句!立即给分,谢谢了!
  详细解决方案

查询语句!立即给分,谢谢了!

热度:12   发布时间:2016-04-24 19:32:57.0
求一个查询语句!!--在线等,立即给分,多谢了!!
表yn,表yns,通过mainid关联,1对多关系。

表yn:

字段: mainid     desc
内容:    1         aaaaa
        2         bbbbb
        3         cccc

表yns:

字段: mainid     stage  person
内容:    1        阶段A    张三
        1        阶段B     李四
         1                   李四       
         1         fga       李四
        2        阶段A     张三
         2        阶段B     李四
         2        阶段C     王五


希望能在查询中过滤掉除了(阶段A,阶段B,阶段C)的数据,以下面的形式列出数据:

     mainid    desc   stage   person  stage     person  stage   person
      1       aaaaa   阶段A    张三      阶段B       李四
       2       bbbbb   阶段A    张三      阶段B       李四    阶段C   王五

------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2013-10-22 18:04:04
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[yn]
if object_id('[yn]') is not null drop table [yn]
go 
create table [yn]([mainid] int,[desc] varchar(5))
insert [yn]
select 1,'aaaaa' union all
select 2,'bbbbb' union all
select 3,'cccc'
--> 测试数据:[yns]
if object_id('[yns]') is not null drop table [yns]
go 
create table [yns]([mainid] int,[stage] varchar(5),[person] varchar(4))
insert [yns]
select 1,'阶段A','张三' union all
select 1,'阶段B','李四' union all
select 1,'李四',null union all
select 1,'fga','李四' union all
select 2,'阶段A','张三' union all
select 2,'阶段B','李四' union all
select 2,'阶段C','王五'
--------------开始查询--------------------------

--select * from [yns]

select a.mainid,a.[DESC],'阶段A' stage,person=MAX(CASE WHEN stage='阶段A' THEN person ELSE NULL END ),
'阶段B' stage,person=MAX(CASE WHEN stage='阶段B' THEN person ELSE NULL END ),
'阶段C' stage,person=MAX(CASE WHEN stage='阶段C' THEN person ELSE NULL END )
from [yn] a INNER JOIN [yns] b ON a.mainid=b.mainid
WHERE stage  IN ('阶段A','阶段B','阶段C')
GROUP BY a.mainid,a.[DESC]
----------------结果----------------------------
/* 
mainid      DESC  stage person stage person stage person
----------- ----- ----- ------ ----- ------ ----- ------
1           aaaaa 阶段A   张三     阶段B   李四     阶段C   NULL
  相关解决方案