sql - CONCAT后如何在重复行号上拆分字符串
问题描述
如图所示,我有 2 个表:
我想通过连接它们来连接这两个表,并将它们拆分为重复的行号。
CREATE TABLE #portiontable (
PortionKey NVARCHAR(100),
RN INT,
)
CREATE TABLE #finaltable (
Value NVARCHAR(100),
RN INT,
)
INSERT INTO #finaltable (Value,RN)
VALUES ('KRM__21X0E',1),
('C',2),
('',3),
('',4),
('KRM__21X0E',1),
('C',2),
('',3),
('',4)
INSERT INTO #portiontable (PortionKey,RN)
VALUES ('100',1),
('0AD',2),
('D',3)
SELECT * FROM #finaltable f
SELECT * FROM #portiontable p
SELECT (SELECT ''+ ValuePortionKey
FROM (
SELECT f.RN,f.value,P.PortionKey, f.value + P.PortionKey AS ValuePortionKey
FROM #portiontable p
INNER JOIN #finaltable f ON p.rn = f.rn
) ft
FOR XML PATH('')) as PartSignature
DROP TABLE #portiontable
DROP TABLE #finaltable
所需的输出是 2 行:
PartSignature
KRM__21X0E100C0ADD
KRM__21X0J100K0ADD
实际输出为:
PartSignature
KRM__21X0E100C0ADDKRM__21X0J100K0ADD
解决方案
首先,您似乎在#finaltable
. 您需要另一列将其标识为一组。我ValueSet
在#finaltable
.
而且,我认为您的示例数据与预期的输出不对应。我已经修改了示例数据#finaltable
最后,STRING_AGG
用于执行字符串连接,然后你可以GROUP BY
新的ValueSet
CREATE TABLE #portiontable
(
PortionKey NVARCHAR(100),
RN INT,
)
CREATE TABLE #finaltable
(
ValueSet INT,
Value NVARCHAR(100),
RN INT,
)
INSERT INTO #portiontable (PortionKey,RN)
VALUES ('100',1),
('0AD',2),
('D',3)
INSERT INTO #finaltable (ValueSet,Value,RN)
VALUES (1,'KRM__21X0E',1),
(1,'C',2),
(1,'',3),
(1,'',4),
(2,'KRM__21X0J',1),
(2,'K',2),
(2,'',3),
(2,'',4)
SELECT f.ValueSet,
STRING_AGG (f.Value + p.PortionKey, '') AS ValuePortionKey
FROM #portiontable p
INNER JOIN #finaltable f ON p.RN = f.RN
GROUP BY f.ValueSet
DROP TABLE #portiontable
DROP TABLE #finaltable
-- Result
1 KRM__21X0E100C0ADD
2 KRM__21X0J100K0ADD
推荐阅读
- android - 如何在 Android Oreo 及更高版本的通知托盘中显示带有图片的 Android 通知?
- php - jQuery Datepicker 在每个月的前 10 天不显示事件
- hibernate - 在 Spring Boot 中通过 JPA/Hibernate 创建 DB 触发器
- javascript - 用于数组输入的jQuery自动完成器
- javascript - 一旦GIF到达屏幕中间而不是屏幕中的任何位置,如何使用Javascript播放GIF
- python - 从头开始设计一个 CNN
- android-manifest - 合并动态功能清单时出现Android错误
- python-3.x - 如何为 ECB 模式提供有意义的 IV(Python)
- java - java - 如何按空格获取和拆分多个字符串行输入,然后将它们添加到Java中的arrayList?
- apache-kafka - Kafka 生产者/消费者打开了太多的文件描述符