SQL语句怎么写?

hyaccp 2010-06-12 03:47:14
20: 如下数据,查询时需要满足三个条件
1.给定任意一个值
2.任意值必须在fname 或者 hostname中出现一次,方可查询,反之不处理查询下一行数据
3.查询fname或者hostname列中的值,但是列中的值不等于给定的值

范例:
当输入的值为A时,查询第1、2行数据时,应该返回的是除了fname的所有列中的值
(因为fname的值与输入的值相同)
查询第3行时应该跳过,不处理
查询到第4、5行时,应该返回的是除了hostname的所有列中的值

No. msg fname hostname time
1 NULL A B 2010-06-09 23:52:39.903
2 NULL A C 2010-06-09 23:52:39.937
3 NULL C B 2010-06-09 23:53:22.450
4 NULL D A 2010-06-09 23:54:53.403
5 NULL C A 2010-06-09 23:58:53.140
...全文
66 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
永生天地 2010-06-12
  • 打赏
  • 举报
回复
declare @t varchar(10)
set @t='A'
select No, msg ,(case @A when fname then hostname else fname) name , time from tb
where (fname=@A and hostname<>@A)
or (fname<>@A and hostname=@A)
hyaccp 2010-06-12
  • 打赏
  • 举报
回复
恩,谢谢
chuifengde 2010-06-12
  • 打赏
  • 举报
回复
--这个意思?
declare @a table(No INT, msg VARCHAR(20), fname VARCHAR(20), hostname VARCHAR(20), TIME DATETIME)
insert @a select 1, NULL ,'A', 'B', '2010-06-09 23:52:39.903'
union all select 2, NULL ,'A', 'C', '2010-06-09 23:52:39.937'
union all select 3, NULL ,'C', 'B', '2010-06-09 23:53:22.450'
union all select 4, NULL ,'D', 'A', '2010-06-09 23:54:53.403'
union all select 5, NULL ,'C', 'A', '2010-06-09 23:58:53.140'

DECLARE @b CHAR(1)
SET @b='A'
SELECT No,msg,isnull(NULLIF(fname,@b),'')+isnull(NULLIF(hostname,@b),'') NAME, TIME
FROM @a WHERE CHARINDEX(@b,fname+hostname)>0

--result
/*No msg NAME TIME
----------- -------------------- ------------------------------ ------------------------------
1 NULL B 2010-06-09 23:52:39.903
2 NULL C 2010-06-09 23:52:39.937
4 NULL D 2010-06-09 23:54:53.403
5 NULL C 2010-06-09 23:58:53.140

(所影响的行数为 4 行)

*/
caixia615 2010-06-12
  • 打赏
  • 举报
回复
select No,msg ,(case when fname='a' then hostname when hostname='a' then
fname end)newcol, time from table where fname='a' or hostname='a'
caixia615 2010-06-12
  • 打赏
  • 举报
回复
declare @t varchar(10)
set @t='A'
select No,msg ,hostname newcol, time
from tb
where (fname=@A and hostname<>@A)
union all
select No,msg ,fname newcol, time
from tb
where (fname<>@A and hostname=@A)
hyaccp 2010-06-12
  • 打赏
  • 举报
回复
等到与它的值不相等的列(fname与hostname)
chuifengde 2010-06-12
  • 打赏
  • 举报
回复
那给定A,得到的结果是啥
hyaccp 2010-06-12
  • 打赏
  • 举报
回复
还有一个条件啊,就是如果传过来的值与fname相等,就不查fname这列的值,反之,不查hostname列的值
永生天地 2010-06-12
  • 打赏
  • 举报
回复
declare @t varchar(10)
set @t='A'
select * from tb
where (fname=@A and hostname<>@A)
or (fname<>@A and hostname=@A)

27,579

社区成员

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

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