select a.* ,b.pa_name, c.tp_name , d.dd_name from patientreport a , patient b , b_testprofile c , sysdictdetail d where d.dd_name='生物' and a.type=d.dd_code and b.ch_id='CH04123000001' and a.pa_id=b.pa_id and a.tp_code=c.tp_code and
isUserInput in (
case
when ('全部'='已做') then ('2')
when ('全部'='未做') then ('1')
when ('全部'='全部') then ('1','2')
end
)该语句在查询分析器中报错,"第6行 , 号附近有语法错误我把该语句改成
select a.* ,b.pa_name, c.tp_name , d.dd_name from patientreport a , patient b , b_testprofile c , sysdictdetail d where d.dd_name='生物' and a.type=d.dd_code and b.ch_id='CH04123000001' and a.pa_id=b.pa_id and a.tp_code=c.tp_code and
isUserInput in ('1','2')
系统就可以查询, 请问高手我的case语句是不是有问题啊??
isUserInput in (
case
when ('全部'='已做') then ('2')
when ('全部'='未做') then ('1')
when ('全部'='全部') then ('1','2')
end
)该语句在查询分析器中报错,"第6行 , 号附近有语法错误我把该语句改成
select a.* ,b.pa_name, c.tp_name , d.dd_name from patientreport a , patient b , b_testprofile c , sysdictdetail d where d.dd_name='生物' and a.type=d.dd_code and b.ch_id='CH04123000001' and a.pa_id=b.pa_id and a.tp_code=c.tp_code and
isUserInput in ('1','2')
系统就可以查询, 请问高手我的case语句是不是有问题啊??
case 字段 when 值 then ('2') end
case 字段 when 值 then ('1') end
case 字段 where 值 then ('1','2') end
若是 则
isUserInput in
case
when '全部'='已做' then ('2')
when '全部'='未做' then ('1')
else '全部'='全部' then ('1','2')
end
不知道搂主什么意思,条件语句是常量为什么还要比较,或许你得意思是:已作,未作和全部查询。
若是,你用case语句实在不妥,你可以些个存储过程来完成,或者通过一个tinyint变量传递:
0:全部,1:未作,2已作。
select a.* ,b.pa_name, c.tp_name , d.dd_name from patientreport a , patient b , b_testprofile c , sysdictdetail d where d.dd_name='生物' and a.type=d.dd_code and b.ch_id='CH04123000001' and a.pa_id=b.pa_id and a.tp_code=c.tp_code and
isUserInput >=isuserinputqs and isUserInput <=isuserinputzz
其中isuserinputqs 和isuserinputzz是变量你可以这样赋值
已作 isuserinputqs=2 ,insuserinpitzz=2
未作 isuserinputqs=1 ,insuserinpitzz=1
全部 isuserinputqs=1 ,insuserinpitzz=2
就搞定了,最好不要用case,它会影响你得查询速度
case
when '全部'='已做' then ('2')
when '全部'='未做' then ('1')
else ('1','2')
end
)
这句我也试过,还是报上面的错误 , 我是想通过isuserinput字段的值来进行全部或者局部的查询,这样做是否妥当暂且不论,但是他为什么会报错,错在什么地方,我却是一点头绪都没有
gamaster(a明) 谢谢你的提示,我会仔细考虑一下,那种方式比较适合.还有谢谢Kshape() 和lbd8848(lbd) 尽管问题还没解决 呵呵
我给得解法是吧case语句外面得括号去掉,你怎么还带上
这样可以,但这样就不行
select 1 where 1 in (case when 1=1 then (1) when 2=2 then(2) else(1,2) end)
报和你一样得错误
可见 不支持这种写法
case 字段 when '已做' then charindex('1',isuserinput)>0
case 字段 when '未做' then charindex('2',isuserinput)>0不知可不可以,~
isuserinput in s_in
已作:s_in='(''2'')'
未作:s_in='(''1'')'
全部:s_in='(''1'',''2'')'
方法太多了
1.简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
2.CASE 搜索函数计算一组布尔表达式以确定结果。
= a.au_id
在 SELECT 语句中,简单 CASE 函数仅检查是否相等,而不进行其它比较。下面的示例使用 CASE 函数更改图书分类显示,以使其更易于理解。USE pubs
GO
SELECT Category =
CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Modern Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Traditional Cooking'
ELSE 'Not yet categorized'
END,
CAST(title AS varchar(25)) AS 'Shortened Title',
price AS Price
FROM titles
WHERE price IS NOT NULL
ORDER BY type, price
COMPUTE AVG(price) BY typeB. 使用带有简单 CASE 函数和 CASE 搜索函数的 SELECT 语句
在 SELECT 语句中,CASE 搜索函数允许根据比较值在结果集内对值进行替换。下面的示例根据图书的价格范围将价格(money 列)显示为文本注释。USE pubs
GO
SELECT 'Price Category' =
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 10 THEN 'Very Reasonable Title'
WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
ELSE 'Expensive book!'
END,
CAST(title AS varchar(20)) AS 'Shortened Title'
FROM titles
ORDER BY price
GO
C. 使用带有 SUBSTRING 和 SELECT 的 CASE 函数
下面的示例使用 CASE 和 THEN 生成一个有关作者、图书标识号和每个作者所著图书类型的列表。 USE pubs
SELECT SUBSTRING((RTRIM(a.au_fname) + ' '+
RTRIM(a.au_lname) + ' '), 1, 25) AS Name, a.au_id, ta.title_id,
Type =
CASE
WHEN SUBSTRING(ta.title_id, 1, 2) = 'BU' THEN 'Business'
WHEN SUBSTRING(ta.title_id, 1, 2) = 'MC' THEN 'Modern Cooking'
WHEN SUBSTRING(ta.title_id, 1, 2) = 'PC' THEN 'Popular Computing'
WHEN SUBSTRING(ta.title_id, 1, 2) = 'PS' THEN 'Psychology'
WHEN SUBSTRING(ta.title_id, 1, 2) = 'TC' THEN 'Traditional Cooking'
END
FROM titleauthor ta JOIN authors a ON ta.au_id = a.au_id
select a.* ,b.pa_name, c.tp_name , d.dd_name from patientreport a , patient b , b_testprofile c , sysdictdetail d where d.dd_name='生物' and a.type=d.dd_code and b.ch_id='CH04123000001' and a.pa_id=b.pa_id and a.tp_code=c.tp_code and
isUserInput >=isuserinputqs and isUserInput <=isuserinputzz
其中isuserinputqs 和isuserinputzz是变量你可以这样赋值
已作 isuserinputqs=2 ,insuserinpitzz=2
未作 isuserinputqs=1 ,insuserinpitzz=1
全部 isuserinputqs=1 ,insuserinpitzz=2
就搞定了,最好不要用case,它会影响你得查询速度