SQL判断多笔数据中,字段相同的数据只取其中一笔。如下 。

只想取到A01,A02,A03,B01,B02,C01,C02。其中A02只要Run的那一笔。如何实现?求指教·谢谢。... 只想取到A01,A02,A03,B01,B02,C01,C02 。其中A02只要Run的那一笔 。如何实现? 求指教· 谢谢 。 展开
 我来答
百度网友bfb0ec3
推荐于2016-03-10 · TA获得超过118个赞
知道答主
回答量:41
采纳率:0%
帮助的人:47.9万
展开全部
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)

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rkc009
2013-12-11 · TA获得超过1499个赞
知道大有可为答主
回答量:2098
采纳率:60%
帮助的人:1779万
展开全部
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')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_冰河
2013-12-11 · 超过18用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:35.9万
展开全部
看函数应该是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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式