字段值与显示值

Un1 2001-07-18 11:13:51
表1中有字段“错误代码”是一个Long,其中Long值的32个bit位的组合代表32种错误的组合,32种错误可能同时存在。
表2中存有32种“错误代码”和相应的“错误描述”。

问题是我如何写 SQL 语句根据表一的“错误代码”让“错误描述”显示出来。注意表2中“错误代码”实际上只需要32种,但表一中“错误代码”组合可能有2^31种。
...全文
190 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
seewell 2001-07-20
  • 打赏
  • 举报
回复
为什么一定要静态写在SQL里面呢,你可以在程序中 用循环给SQL语句赋上条件呀
dragonerfish 2001-07-20
  • 打赏
  • 举报
回复
关注!!!
nononono 2001-07-19
  • 打赏
  • 举报
回复
表2中的“错误代码”是什么形式的?

A.
1
2
4
8
16
...

B.
1
2
3
4
5
...

A形式稍容易处理.

另有一个问题:
2^32已经不能用有符号的LONG正常表示了吧? 表1中的错误代码怎么能有第32位的错误位? 是用负数表示吗?
nononono 2001-07-19
  • 打赏
  • 举报
回复
哦. 显示在一行这样的要求有些麻烦, 好像得使用游标. 得想想有没有不用游标.

你用什么DBMS?
Un1 2001-07-19
  • 打赏
  • 举报
回复
在同一字段显示为:
错误一<空格>错误二<空格>..
nononono 2001-07-19
  • 打赏
  • 举报
回复
我觉得程序并不死板, 使用中间表会使程序变得臃肿, 并不会灵活. 这样语句虽然长, 但是很清楚, 不正是应该期望的嘛. 呵呵

主要是你的错误代码是用位表示的, 而SQL语句在这方面不是擅长, 必然有不利索的代码.

也许有更好的方法. 呵呵
Un1 2001-07-19
  • 打赏
  • 举报
回复
多谢 4no.

我先试试你的方法。不过我的原意是可不可能从增加一些中间表一类的方法,如果这样写可以,但一方面程序变得死板,另一方面要把32个都写完是不是有点太“那个”了?

to guo(正在消化Oracle):
当然实际的错误不会有那么多,实际上错误种类只有32种,问题就在于这些错误可能以组合方式出现。
nononono 2001-07-19
  • 打赏
  • 举报
回复
你的贴子我不敢接. 呵呵


我没遇到过, 得慢慢试试.
guo 2001-07-19
  • 打赏
  • 举报
回复
4no老兄,帮我看一下
http://www.csdn.net/expert/topic/200/200993.shtm
好吗?
nononono 2001-07-19
  • 打赏
  • 举报
回复
还有错呐! 应该如下:

select 错误代码,
(case when 错误代码%2=1 then (select 错误描述 from 表2 where 错误代码=1)+',' else '' end)+
(case when (错误代码/2)%2=1 then (select 错误描述 from 表2 where 错误代码=2)+',' else '' end)+
(case when (错误代码/4)%2=1 then (select 错误描述 from 表2 where 错误代码=3)+',' else '' end)+
........

nononono 2001-07-19
  • 打赏
  • 举报
回复
上面的语句有错误(Un1一定看的出来.呵呵).

select 错误代码,
(case when 错误代码%2=1 then (select 错误描述 from 表2 where 错误代码=1)+',' else '' end)+
(case when (错误代码/4)%2=1 then (select 错误描述 from 表2 where 错误代码=2)+',' else '' end)+
(case when (错误代码/8)%2=1 then (select 错误描述 from 表2 where 错误代码=3)+',' else '' end)+
(case when (错误代码/16)%2=1 then (select 错误描述 from 表2 where 错误代码=4)+',' else '' end)+
(case when (错误代码/32)%2=1 then (select 错误描述 from 表2 where 错误代码=5)+',' else '' end)+
(case when (错误代码/64)%2=1 then (select 错误描述 from 表2 where 错误代码=6)+',' else '' end)+
(case when (错误代码/128)%2=1 then (select 错误描述 from 表2 where 错误代码=7)+',' else '' end)+
..................
(case when (错误代码/XXXXXX) %2=1 then (select 错误描述 from 表2 where 错误代码=32) else '' end) as 错误信息
from 表1
guo 2001-07-19
  • 打赏
  • 举报
回复
兄弟,你是什么系统,怎么错误信息搞的这么多,估计MS的产品也没你的组合多吧^()^
luhongjun 2001-07-19
  • 打赏
  • 举报
回复
我建议在单建一个错误码表,有一个关键字段与表一关联,和表一建立一对多关系,更方便且科学。
nononono 2001-07-19
  • 打赏
  • 举报
回复
假如表2中的“错误代码”是
1
2
3
4
5

如下:


select 错误代码,
(case when 错误代码%2=1 then (select 错误描述 from 表2 where 错误代码=1)+',' else '' end)+
(case when 错误代码%4=1 then (select 错误描述 from 表2 where 错误代码=2)+',' else '' end)+
(case when 错误代码%8=1 then (select 错误描述 from 表2 where 错误代码=3)+',' else '' end)+
(case when 错误代码%16=1 then (select 错误描述 from 表2 where 错误代码=4)+',' else '' end)+
(case when 错误代码%32=1 then (select 错误描述 from 表2 where 错误代码=5)+',' else '' end)+
(case when 错误代码%64=1 then (select 错误描述 from 表2 where 错误代码=6)+',' else '' end)+
(case when 错误代码%128=1 then (select 错误描述 from 表2 where 错误代码=7)+',' else '' end)+
..................
(case when 错误代码%XXXXXX=1 then (select 错误描述 from 表2 where 错误代码=32) else '' end) as 错误信息
from 表1


XXXXXX 是2的31次方

nononono 2001-07-18
  • 打赏
  • 举报
回复
如果表1中一条记录的错误代码对应着多条错误信息, 你打算怎样显示这些错误信息?

每条错误信息一行?
表1中一条记录的错误信息显示在一行?
nononono 2001-07-18
  • 打赏
  • 举报
回复
取0位: 错误代码%2
取1位: (错误代码/2)%2
取2位: (错误代码/4)%2
取3位: (错误代码/8)%2
...

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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