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语句该怎么写
明显你这个语句不对啊 ,哪有子查询啊This is not permitted when the subquery follows
你把表结构和完整的查询语句贴出来才好解决啊
这个语句肯定是没有问题的,是表示为一列就不行了
完整的查询语句是一个存储过程,全贴上来还有两张表,表也很长,很麻烦啊
你给出的这段SQL是没错的至于你报错的问题 关键不在你给出的这个 同意楼上的 把整个贴出来
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 |
|
|
@暗夜的萤火虫: 你这是源码复制过来的吗 如果是的话你 relate_value=‘1AJ0’的符号多打错了应该是这样“'1AJO'”
这、这、这 SQL 密密麻麻 被吓住了。你这个应该就是你所说的那个语句select得到的是多个记录导致的问题,你可以尝试使用 建立一个函数 把那个select得到的记录按照你的要求拼接成一个记录,然后在你那个密密麻麻的SQL里使用。
我看你的里面一些字眼 你是不是做维修电脑系统的啊 比如保内保外
@小w威: 不是,是别人的系统帮忙看看
SELECT top 1 code_desc FROM code_list WHERE type_id=12 and relate_value='1AJ0'
这样就只能查出来第一条记录了啊,lz要查所有的
估计这个sql要大改,可是不知道怎么改
@暗夜的萤火虫: 你都说要查所有的 那就拼接呗,写个自定义函数。
@小菜接口: 这个不会了
lz的想法是在后面from中也加上code_list表,然后再条件中加上c.relate_value='1AJ0'
现在的问题就是不知道怎样把c.code_desc中满足条件的值赋给equ_sor_desc这一列了
@暗夜的萤火虫:
貌似一条语句可以实现。
给你个例子:
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
就是整个语句错误了,后来用别的办法连接表解决的