求一SQL根据不同条件取不同列值?

xingf8 2014-06-26 10:55:35
例如:A表
Id(单号),app_cd1(承认者CD1),app_nm1(承认者名1),app_cd2(承认者CD2),app_nm2(承认者名2)
A001,XA121,张三,NULL,NULL
A002,XA111,黄二,XA001,李四
A002,XA101,王五,XA002,赵六
我想传入“XA101”时取出王五。
传入“XA001”时取出李四来。
这个SQL要怎么写?那位大神知道的。
...全文
929 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingf8 2014-06-26
  • 打赏
  • 举报
回复
不好意思,全文索引怎么用?
發糞塗牆 2014-06-26
  • 打赏
  • 举报
回复
那你用全文索引吧
xingf8 2014-06-26
  • 打赏
  • 举报
回复
如果在app_cd1到app_cd10之间,用UNION那不是很麻烦,性能会不会很差
發糞塗牆 2014-06-26
  • 打赏
  • 举报
回复
你试试,回复时引用一下:
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(发粪涂墙)
-- Date    :2014-06-26 11:11:54
-- Version:
--      Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 
--	Jun 17 2011 00:54:03 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据[A]
if object_id('[A]') is not null drop table [A]
go 
create table [A]([Id] nvarchar(8),[app_cd1] nvarchar(10),[app_nm1] nvarchar(4),[app_cd2] nvarchar(10),[app_nm2] nvarchar(4))
insert [A]
select 'A001','XA121',N'张三',null,null union all
select 'A002','XA111',N'黄二','XA001',N'李四' union all
select 'A002','XA101',N'王五','XA002',N'赵六'
--------------生成数据--------------------------
DECLARE @name VARCHAR(10)
SET @name='XA001'
SELECT ISNULL(a.id,b.id)id,ISNULL(a.app_cd1,b.app_cd2)app_cd,ISNULL(a.app_nm1,b.app_nm2)appnm
FROM 
(select id,app_cd1,app_nm1
from [A] 
WHERE app_cd1=@name) a FULL JOIN (select id,app_cd2,app_nm2
from [A] 
WHERE app_cd2=@name)b ON a.id=b.id
----------------结果----------------------------
/* 
id       app_cd     appnm
-------- ---------- -----
A002     XA001      李四
*/
唐诗三百首 2014-06-26
  • 打赏
  • 举报
回复

create table A表
(Id varchar(10),app_cd1 varchar(10),app_nm1 varchar(10),app_cd2 varchar(10),app_nm2 varchar(10))

insert into A表
 select 'A001','XA121','张三',null,null union all
 select 'A002','XA111','黄二','XA001','李四' union all
 select 'A002','XA101','王五','XA002','赵六'


-- 传入“XA101”时取出王五
declare @x varchar(10)
select @x='XA101'

select top 1 app_nm
from 
(select app_cd1 'app_cd',app_nm1 'app_nm' from A表
 union all
 select app_cd2 'app_cd',app_nm2 'app_nm' from A表) t
where app_cd=@x

/*
app_nm
----------
王五

(1 row(s) affected)
*/


-- 传入“XA001”时取出李四
declare @x varchar(10)
select @x='XA001'

select top 1 app_nm
from 
(select app_cd1 'app_cd',app_nm1 'app_nm' from A表
 union all
 select app_cd2 'app_cd',app_nm2 'app_nm' from A表) t
where app_cd=@x

/*
app_nm
----------
李四

(1 row(s) affected)
*/
xingf8 2014-06-26
  • 打赏
  • 举报
回复
也就是说app_cd在app_cd1,app_cd2里都有可能,和app_cd1相等时,取出app_nm1,和app_cd2相等时,取出app_nm2
發糞塗牆 2014-06-26
  • 打赏
  • 举报
回复
或者像2楼那样union 起来
發糞塗牆 2014-06-26
  • 打赏
  • 举报
回复
where 那里换or
xingf8 2014-06-26
  • 打赏
  • 举报
回复
但我app_cd2里也有可能呀,当在app_cd2里面,我就想取app_nm2
向东流 2014-06-26
  • 打赏
  • 举报
回复
select nm
from (select app_cd1 cd,app_nm1 nm
from a
union all
select app_cd2,app_nm2
from a ) t
where cd=“XA101”
發糞塗牆 2014-06-26
  • 打赏
  • 举报
回复
select app_nm1 from a where app_cd1=''--这里填上你要传的值
發糞塗牆 2014-06-26
  • 打赏
  • 举报
回复
百度:sql server 全文索引 http://msdn.microsoft.com/zh-cn/library/ms142575(SQL.90).aspx这东西比较复杂,我见过有一整本书介绍的。。。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧