首页 新闻 会员 周边

一个sql语句

0
悬赏园豆:5 [已解决问题] 解决于 2012-05-27 21:49

SELECT code_desc FROM code_list WHERE type_id=12 and relate_value='1AJ0'

得出结果有多个值,用结果表示为某一列

报错Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

求问,这个sql语句该怎么写

暗夜的萤火虫的主页 暗夜的萤火虫 | 初学一级 | 园豆:8
提问于:2012-05-09 09:33
< >
分享
最佳答案
0

明显你这个语句不对啊 ,哪有子查询啊This is not permitted when the subquery follows

你把表结构和完整的查询语句贴出来才好解决啊

收获园豆:5
天生我豺 | 初学一级 |园豆:161 | 2012-05-09 09:35

这个语句肯定是没有问题的,是表示为一列就不行了

完整的查询语句是一个存储过程,全贴上来还有两张表,表也很长,很麻烦啊

暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-05-09 10:01
其他回答(4)
0

你给出的这段SQL是没错的至于你报错的问题 关键不在你给出的这个 同意楼上的  把整个贴出来

小w威 | 园豆:37 (初学一级) | 2012-05-09 10:00

SELECT b.mid,b.equ_id,a.id,b.line_no,equ_cname,equ_ename,equ_sn,equ_asset_no,equ_model,
equ_hospital,equ_use_dept,equ_keep_place,equ_keeper,
CASE equ_import_yn WHEN 'Y' THEN '进口' ELSE '非进口' END equ_import_yn,equ_maker,equ_vendor,
err_desc, err_date,
err_user,fee_dept,err_reason,err_phone,
process,pro_date ,expect_date,equ_keep_dept,
CASE ensure_yn WHEN 'Y' THEN '保内' ELSE '保外' END ensure_yn,pro_type,pro_result,pro_vendor, spare_yn,
 finish_date,assign_date,
maintain_fee,b.maintain_user, CASE attach_yn WHEN 'Y' THEN '更换配件' ELSE '' END attach_yn,
( SELECT code_desc FROM code_list WHERE  type_id=4 AND code_value=pro_type) pro_type_desc,
( SELECT code_desc FROM code_list WHERE type_id=5 AND code_value=pro_result) pro_result_desc
,CONVERT(NVARCHAR(10),arrive_date,120)  arrive_date,assign_date, expect_date,nurse_leader,
( SELECT code_desc FROM code_list WHERE type_id=12 AND relate_value=‘1AJ0’) equ_sort_desc  ,( SELECT code_desc FROM code_list WHERE type_id=8 AND code_value=b.err_level) err_level
,b.equ_sort,equ_keep_dept
from equipment a,equ_maintain_history b
WHERE  a.id=b.equ_id

 

a,b表肯定是没什么问题的

C表结构

Table Name

code_list

Description

参数表

P-Key

 Type_id+code_value

Column

Data Type

Length

Default

Description

type_id

int

4

 0

参数类型,来源于code_type 

code_value

nvarchar

50

 ‘’

参数值 

code_desc

nvarchar

500

 ‘’

参数值描述 

code_remark

nvarchar

500

 ‘’

参数备注 

code_vseq

int

4

 0

参数值在画面的显示顺序 

relate_value

nvarchar

50

 ‘’

关联值 

active

nchar

1

 Y

状态:Y有效,N无效 

create_time

datetime

8

 Getdate()

创建日期 

create_user

nvarchar

50

 ‘’

创建人 

modify_time

datetime

8

 

 

modify_user

nvarchar

50

 

 

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-05-09 10:05

@暗夜的萤火虫: 你这是源码复制过来的吗  如果是的话你 relate_value=‘1AJ0’的符号多打错了应该是这样“'1AJO'”

支持(0) 反对(0) 小w威 | 园豆:37 (初学一级) | 2012-05-09 10:15
1

这、这、这 SQL 密密麻麻 被吓住了。你这个应该就是你所说的那个语句select得到的是多个记录导致的问题,你可以尝试使用 建立一个函数 把那个select得到的记录按照你的要求拼接成一个记录,然后在你那个密密麻麻的SQL里使用。

小菜接口 | 园豆:197 (初学一级) | 2012-05-09 10:17

我看你的里面一些字眼  你是不是做维修电脑系统的啊  比如保内保外 

支持(0) 反对(0) 小w威 | 园豆:37 (初学一级) | 2012-05-09 10:23

@小w威: 不是,是别人的系统帮忙看看

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-05-09 10:41
0

SELECT top 1 code_desc FROM code_list WHERE type_id=12 and relate_value='1AJ0'

小材小用 | 园豆:639 (小虾三级) | 2012-05-09 10:24

这样就只能查出来第一条记录了啊,lz要查所有的

估计这个sql要大改,可是不知道怎么改

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-05-09 10:35

@暗夜的萤火虫: 你都说要查所有的 那就拼接呗,写个自定义函数。

支持(0) 反对(0) 小菜接口 | 园豆:197 (初学一级) | 2012-05-09 10:44

@小菜接口: 这个不会了

lz的想法是在后面from中也加上code_list表,然后再条件中加上c.relate_value='1AJ0'

现在的问题就是不知道怎样把c.code_desc中满足条件的值赋给equ_sor_desc这一列了

支持(0) 反对(0) 暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-05-09 10:56

@暗夜的萤火虫: 

貌似一条语句可以实现。

给你个例子:

declare @T Table(Id numeric(18), Code varchar(10))
insert into @T(id,code)
select 1, 'zhang'
union all
select 1, 'yan'
union all
select 2, 'zdw'
union all
select 2, 'ydj';

SELECT B.id,LEFT(UserList,LEN(UserList)-1) code FROM (
SELECT id,(SELECT code+',' FROM @T WHERE id=A.id FOR XML PATH('')) AS UserList FROM @T A GROUP BY id
) B

支持(0) 反对(0) 小菜接口 | 园豆:197 (初学一级) | 2012-05-09 11:45
1

就是整个语句错误了,后来用别的办法连接表解决的

暗夜的萤火虫 | 园豆:8 (初学一级) | 2012-05-27 21:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册