select case when CardStatusID=20 then CardStatusID else max(CardID) end from 表名 如果没写错的话,就是这样了。。
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的
你case when 里面错了 case when CardStatusID=20 then CardStatusID else max(CardID)
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名 这样呢?
多大个事啊,这么简单 select case when CardStatusID = 20 ten CardStatusID else CardID end as 你要的字段 from (select id, sum(case when CardStatusID=20 then CardStatusID else 0 end) as CardStatusID , max(CardID) as CardID from 你的表 group by id) temptb
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名 这样呢?有问题的
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名 这样呢?完全不对了
改为select case when CardStatusID = 20 ten CardStatusID else CardID end as 你要的字段 from (select id, sum(case when CardStatusID=20 then CardStatusID else CardStatusID end) as CardStatusID , max(CardID) as CardID from 你的表 group by id) temptb这样????
创建一个临时表,分二或三次处理或是过滤数据插入临时表中。 然select * from 这个临时表,就是你想要的数据了。
附个代码IF((select * from YourTable where CardStatusID=20)>=1) BEGIN select * from YourTable where CardStatusID=20 END ELSE BEGIN selec * from YouerTable where CardID=(select MAX(CardID) from YourTable) END
if exists (select * from 表名 where CardStatusID= '20') begin select * from 表名 CardStatusID= '20' end else begin select * from 表名where CardStatusID= (select max(CardStatusID) from 表名) end取得哪些字段自己添加
select * from 表名where CardStatusID= (select max(CardID) from 表名)
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名 这样呢?完全不对了
g感谢兄弟的回答,但是还是不对。
[这个不对啊, selec * from YouerTable where CardID=(select MAX(CardID) from YourTable) 这个在怎么可以是这样呢, 等于最大值
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1) BEGIN select * from YourTable where CardStatusID=20 END ELSE BEGIN select * from YouerTable where CardID=(select MAX(CardID) from YourTable) END用这个妥妥的可以
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1) BEGIN select * from YourTable where CardStatusID=20 END ELSE BEGIN select * from YouerTable where CardID=(select MAX(CardID) from YourTable) END用这个妥妥的可以
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1) BEGIN select * from YourTable where CardStatusID=20 END ELSE BEGIN select * from YouerTable where CardID=(select MAX(CardID) from YourTable) END用这个妥妥的可以 你返回的全是20状态的,其他压根没有返回
begin if ((select count(1) from a where CardStatusID=20)>0) begin select * from a where a.empid in(select empid from a where CardStatusID=20) end else begin select * from a where a.empid in(select empid from a where CardID=(select max(CardID) from a)) end end
select * from 表 where cardstatusid=20 union select a.* from 表 as a,(select empid,max(cardid) as c from 表 where cardstatusid<>20 group by empid)) as b where a.empid=b.empid and a.cardid=b.c
declare @count int set @count = ( select COUNT(*) from 表名 where [CardStatusID] <> 20) declare @i int declare @sql varchar(max) set @i=0 set @sql= 'select * from 表名 where [CardStatusID] = 20 ' while @i<@count begin set @sql += ' union ALL ' set @sql += 'select * from 表名 where CardID = (select max(CardID) from 表名)' set @i=@i+1 end exec (@sql) 看下这个可以不
大半天了楼主不会还在纠结这个问题?早上那会没读仔细你的需求,一个sql语句太复杂写不出大不了多查几次,在程序里面处理下也是阔以的。 下面这个是你需要的 select * from (select a. * , b.maxCardID from 你的表 a left join (select 你的表.主键,,max(CardID) as maxCardID from 你的表 group by 你的表.主键) b on a. 你的表.主键= b.你的表.主键) temp where CardStatusID=20 or (CardStatusID !=20 and maxCardID is not null)
select * from 表 where cardstatusid=20 union select a.* from 表 as a,(select empid,max(cardid) as c from 表 where cardstatusid<>20 and empid not in (select empid from 表 where cardstatusid=20) group by empid) as b where a.empid=b.empid and a.cardid=b.c
如果没写错的话,就是这样了。。
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的
你case when 里面错了
case when CardStatusID=20 then CardStatusID else max(CardID)
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名
这样呢?
select case when CardStatusID = 20 ten CardStatusID else CardID end as 你要的字段 from
(select id, sum(case when CardStatusID=20 then CardStatusID else 0 end) as CardStatusID , max(CardID) as CardID from 你的表 group by id) temptb
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名
这样呢?有问题的
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名
这样呢?完全不对了
(select id, sum(case when CardStatusID=20 then CardStatusID else CardStatusID end) as CardStatusID , max(CardID) as CardID from 你的表 group by id) temptb这样????
然select * from 这个临时表,就是你想要的数据了。
BEGIN
select * from YourTable where CardStatusID=20
END
ELSE
BEGIN
selec * from YouerTable where CardID=(select MAX(CardID) from YourTable)
END
begin
select * from 表名 CardStatusID= '20'
end
else
begin
select * from 表名where CardStatusID= (select max(CardStatusID) from 表名)
end取得哪些字段自己添加
max要分组,group by ,一分组就不对.还有是根据empid,人员ID分组的select (case when CardStatusID=20 then CardStatusID else (select top 1 CardID from 表名 order by CardID desc ) end )as result from 表名
这样呢?完全不对了
g感谢兄弟的回答,但是还是不对。
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。
不是你自己说,如果有CardStatusID=20的返回CardStatusID=20的数据,没有就返回CardID最大的数据吗
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1)
BEGIN
select * from YourTable where CardStatusID=20
END
ELSE
BEGIN
select * from YouerTable where CardID=(select MAX(CardID) from YourTable)
END用这个妥妥的可以
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1)
BEGIN
select * from YourTable where CardStatusID=20
END
ELSE
BEGIN
select * from YouerTable where CardID=(select MAX(CardID) from YourTable)
END用这个妥妥的可以
不对啊,最后else,怎么可以是最大值呢,最大值100,那等于100的才有返回数据。楼上+1,最大值是看你的数据来的,不管是100还是多少,都肯定会有返回数据...另外最后一个select 打成selec了抱歉...最近有些手残啊真是..IF((select COUNT(*) from YourTable where CardStatusID=20)>=1)
BEGIN
select * from YourTable where CardStatusID=20
END
ELSE
BEGIN
select * from YouerTable where CardID=(select MAX(CardID) from YourTable)
END用这个妥妥的可以
你返回的全是20状态的,其他压根没有返回
我要的结果是,如果没有20的,就返回其他状态,且CardID最大那条
如:结果是:
我要的结果是,如果没有20的,就返回其他状态,且CardID最大那条
如:结果是:
测试卡1取的是最大cardid那条记录
if ((select count(1) from a where CardStatusID=20)>0)
begin
select * from a where a.empid in(select empid from a where CardStatusID=20)
end
else
begin
select * from a where a.empid in(select empid from a where CardID=(select max(CardID) from a))
end
end
select * from 表 where cardstatusid=20 union
select a.* from 表 as a,(select empid,max(cardid) as c from 表 where cardstatusid<>20 group by empid)) as b where a.empid=b.empid and a.cardid=b.c
declare @count int
set @count = ( select COUNT(*) from 表名 where [CardStatusID] <> 20)
declare @i int
declare @sql varchar(max)
set @i=0
set @sql= 'select * from 表名 where [CardStatusID] = 20 '
while @i<@count
begin
set @sql += ' union ALL '
set @sql += 'select * from 表名 where CardID = (select max(CardID) from 表名)'
set @i=@i+1
end
exec (@sql)
看下这个可以不
下面这个是你需要的
select * from
(select a. * , b.maxCardID from 你的表 a left join (select 你的表.主键,,max(CardID) as maxCardID from 你的表 group by 你的表.主键) b
on a. 你的表.主键= b.你的表.主键) temp where CardStatusID=20 or (CardStatusID !=20 and maxCardID is not null)
怎么会有两条记录呢?
还有就是你的需求是说,如果这一行不是等于20就用CardID最大的那行,这样就会出现多行一样的ID了,我在想:你的需求到底是那样?
union
select a.* from 表 as a,(select empid,max(cardid) as c from 表 where cardstatusid<>20 and empid not in (select empid from 表 where cardstatusid=20) group by empid) as b where a.empid=b.empid and a.cardid=b.c