如何解决SQL将多行合并在一起的表
我有一张桌子,其布局如下
Row ID Name Notes
1 100 A Full Text
2 200 B Full Text
3 300 C Text part1
4 Text part2
5 Text part3
6 400 D Full Text
偶尔将行的Notes单元格的内容填充到其下方的行中(例如,第3行的第4行和第5行具有注释内容)。换句话说,第3行是最后一个“有效”行。我需要将注释内容从第4行和第5行连接到第3行。如何将注释内容合并为单行(第3行)并删除不再需要的行(第4行和第5行)?所以最终产品看起来像这样
Row ID Name Notes
1 100 A Full Text
2 200 B Full Text
3 300 C Full Text
6 400 D Full Text
解决方法
您可以使用累积count()
来分配组,然后进行汇总:
select row_number() over (order by min(row)) as row,min(id) as id,min(name) as name,string_agg(text,' ') within group (order by row) as text
from (select t.*,count(id) over (order by row) as grp
from t
) t
group by grp;
编辑:
在旧版SQL Server中,您可以使用:
select min_row,id,stuff( (select ' ' + t.notes
from t t2
where t2.row >= i.min_row and
(t2.row < i.max_row or i.max_row is null)
for xml path ('')
),1,''
) as notes
from (select id,name,min(row) as min_row,lead(min(row)) over (order by id) as max_row
from t
group by by id,name
) i;
,
如果您正在使用Sql Server 2016,则可以尝试以下查询:
INSERT OVERWRITE INTO MY_DB.DAILY_TABLE (
CUST_NUM
)
SELECT C.CUST_NUM
FROM MY_DB.CUSTOMER_TABLE C
CROSS JOIN MY_DB.THRESHOLD_TABLE T
WHERE T.RUN_DT = CURRENT_DATE()
QUALIFY ROW_NUMBER() OVER (ORDER BY RANDOM()) <= T.MAX_ROWS
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。