当前位置: 代码迷 >> Sql Server >> SQL CASE WHEN 有关问题
  详细解决方案

SQL CASE WHEN 有关问题

热度:25   发布时间:2016-04-24 10:04:01.0
SQL CASE WHEN 问题
已知表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
  相关解决方案