如何解决如何使用分区将最小值/最大值转换为SQL Server中的列?
我想从某个值中获得MIN和MAX并将它们放在彼此相邻的列中。这是我的查询,但我不知道如何转置值...
SELECT *,MIN([CID]) OVER (PARTITION BY [TID] ORDER BY [TID]) MinID,MAX([CID]) OVER (PARTITION BY [TID] ORDER BY [TID]) MaxID
给出:
TID CID DATE
123456789 1 01JAN
123456789 2 02JAN
123456789 3 03JAN
123456789 4 04JAN
结果:
TID CID DATE MIN MAX DATEMIN DATEMAX
123456789 1 01JAN 1 4 01JAN 04JAN
解决方法
这里简单的聚合不够好吗?
select
tid,min(cid) min_cid,max(cid) max_cid,min(date) min_date,max(date) max_date
from mytable
group by tid
或者,如果cid
和date
的值没有相应更改,则可以使用条件聚合:
select
tid,max(case when rn_asc = 1 then cid end) cid_at_min_date,max(case when rn_desc = 1 then cid end) cid_at_max_date,max(date) max_date
from (
select
t.*,row_number() over(partition by tid order by cdate asc ) rn_asc,row_number() over(partition by tid order by cdate desc) rn_desc
from mytable t
) t
where 1 in (rn_asc,rn_desc)
group by tid
此命令按cdate
排序记录,并为您提供与最小和最大日期相对应的cid
。如果您希望以其他方式进行操作,则可以轻松地调整查询(基本上是切换cid
和cdate
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。