
SQL判断多笔数据中,字段相同的数据只取其中一笔。如下 。
只想取到A01,A02,A03,B01,B02,C01,C02。其中A02只要Run的那一笔。如何实现?求指教·谢谢。...
只想取到A01,A02,A03,B01,B02,C01,C02 。其中A02只要Run的那一笔 。如何实现? 求指教· 谢谢 。
展开
3个回答
展开全部
WITH t AS (SELECT areaId FROM 表
GROUP BY areaId HAVING COUNT(areaId) > 1)
SELECT * FROM 表 WHERE ReserverState = 'run' AND areaId IN(SELECT areaId FROM t)
UNION ALL
SELECT * FROM t WHERE areaId NOT IN (SELECT areaId FROM t)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select * from 表 where AreaID in('A01','A03','B01','B02','C01','C02' )
union all
select top 1 * from 表 where AreaID ='A02' and ReserveState = 'Run'
追问
我需要动态的取出,并不是在这个已知的情况下判断 。 比如A01(某个)只有一笔就取出;A02(某个)有多笔我就取出RUN的那一条 。A01,A02都不是固定的
追答
with cte_t as(
select AreaID ,count(AreaID) as c from 表 group by AreaID
)
select a.* from cte_t as b left join 表 as a on a.AreaID = b.AreaID
where b.c = 1 or (b.c > 1 and a.ReserveState = 'Run' or a.ReserveState <> 'Run')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看函数应该是sqlserver的数据库,不知道是什么版本呢?
如果是2005或2008 可以这样写:
SELECT t.* FROM (
SELECT
ROW_NUMBER() OVER(PARTION BY t.AREAID ORDER BY ReserveState DESC )) as rn.
t.*
FROM TABLE t
WHERE 1=1
) t
WHERE t.rn=1
如果是2005或2008 可以这样写:
SELECT t.* FROM (
SELECT
ROW_NUMBER() OVER(PARTION BY t.AREAID ORDER BY ReserveState DESC )) as rn.
t.*
FROM TABLE t
WHERE 1=1
) t
WHERE t.rn=1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询