已知表A:f_id,f_type
查询条件
如果f_type为1查询该表前20条数据
否则查询前100条
这个该怎么写呢 ?
SELECT
CASE
WHEN type = 1 THEN
(SELECT TOP 20 * FROM a )
ELSE
(SELECT TOP 100 * FROM a )
END AS lst
FROM
a
这里好像是错的,求帮助
------解决方案--------------------
DECLARE @type INT
SET @type=1
DECLARE @sql VARCHAR(max)
SET @sql='SELECT top ('+CASE @type WHEN 1 THEN '20' ELSE '100' END +') * FROM a '
PRINT @sql
/*
SELECT top (20) * FROM a
*/
------解决方案--------------------
if else
------解决方案--------------------
if type = 1
SELECT top (20) * FROM a
else
SELECT top (100) * FROM a
------解决方案--------------------
楼主你确定你描述的需求没错?难道所有的 f_type 字段只有一个值?
请问A表象下面这样的数据应该取多少条?
f_id f_type
1 0
2 1
3 1
4 0
...
------解决方案--------------------
疑问同#4
如果f_type值都相同的话
with t as(
select row_number() over(order by f_id) as rownumber,* from A)
select * from t where rownumber<=case when f_type=1 then 20 else 100 end
------解决方案--------------------
楼主贴出表数据,或者描述再清楚点。
以目前描述,难道是这样?
select top 20 * from a where f_type=1
union all
select top 100 * from a where f_type<>1
------解决方案--------------------
DECLARE @type INT
SET @type = 1
SELECT TOP ( CASE WHEN @type = 1 THEN 20
ELSE 100
END )
*
FROM a
------解决方案--------------------
这样的逻辑用IF ELSE比较直观一点吧……
------解决方案--------------------
如果f_type为1查询该表前20条数据
否则查询前100条
--> 请问
1.f_type是表a的字段还是变量?
2.如果f_type是字段,当表a.f_type既有1又有非1的值,结果应该是什么?
------解决方案--------------------
SELECT TOP (CASE WHEN TYPE=1 THEN 20 ELSE 60 end)*FROM t
------解决方案--------------------
if exists(select * from a where type=1 )
select top 20 * from a
esle
select top 100 * from a