当前位置: 代码迷 >> Sql Server >> 数据库一个表字段显示出另一个表全部相关的内容?
  详细解决方案

数据库一个表字段显示出另一个表全部相关的内容?

热度:72   发布时间:2016-04-24 10:20:13.0
数据库一个表字段显示出另一个表所有相关的内容???
表A有两个字段姓名(可重复)和方案名称;表B有两个字段即姓名(唯一值);现在要在表B中增加一个字段方案内容,
现在要把表B的方案内容字段循环显示出所有表A的方案名称,关联条件是姓名;

输出结果为:
表A内容为
姓名 方案名称
张三 方案一
李四 方案三
张三 方案二
李四 方案四


最终输出结果表B内容为
姓名 方案内容
张三 方案一;
         方案二;
李四 方案三;
         方案四;


请问这个sql语句如何写,谢谢?

------解决方案--------------------
WITH test1(NAME ,idear )
AS (
SELECT N'张三',N'方案一' UNION ALL
SELECT N'张三',N'方案五' UNION ALL
SELECT N'李四',N'方案三' UNION ALL
SELECT N'张三',N'方案二' UNION ALL
SELECT N'李四',N'方案四' UNION ALL
SELECT N'赵六',N'方案一'  
)
,test AS (
SELECT ROW_NUMBER() OVER(ORDER BY NAME) ID,* FROM test1
)
SELECT 
CASE 
WHEN EXISTS(SELECT 1 FROM test WHERE NAME=a.NAME AND ID<a.ID) THEN NULL 
ELSE NAME 
END NAME,idear
FROM test a
ORDER BY id


/****end
NAME idear
张三 方案五
NULL 方案二
NULL 方案一
李四 方案四
NULL 方案三
赵六 方案一

*/

------解决方案--------------------
----------------------------------------------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2014-06-05 15:35:29
-- 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)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go 
create table [tb]([姓名] varchar(4),[方案名称] varchar(6))
insert [tb]
select '张三','方案一' union all
select '李四','方案三' union all
select '张三','方案二' union all
select '李四','方案四'
--------------开始查询--------------------------
select
  case when px=1 then 姓名 else '' end as 姓名,方案名称
from
  (select px=row_number()over(partition by 姓名 order by getdate()),* from tb)t

----------------结果----------------------------
/* 姓名   方案名称
---- ------
李四   方案三
     方案四
张三   方案一
     方案二

(4 行受影响)
*/
  相关解决方案