Customer_address
当它们具有相同address_index
但不同时,我必须将它们结合起来line_nbr
:
CUSTOMER_NUM | CUSTOMER_CODE | CUSTOMER_ADDRSS | LINE_NBR | ADDRESS_INDEX | ADDRESS_CODE |
---|---|---|---|---|---|
31 | GEW | 海恩城堡路 3901 号 | 17 | 1 | 船 |
30 | GEW | 高速公路 117 N | 18 | 1 | 船 |
212 | GEW | 1005 第二街 | 19 | 2 | 船 |
23 | GEW | 海恩城堡路 3901 号 | 20 | 3 | 船 |
241 | GEW | 高速公路 117 N | 21 | 3 | 船 |
360 | GEW | 麦卡锡路 465 号 | 1 | 4 | 船 |
469 | GEW | 海恩城堡路 3901 号 | 1 | 5 | 船 |
470 | GEW | 高速公路 117 N | 2 | 5 | 船 |
我需要结合 CUSTOMER_NUM 31 和 30 来阅读
Castle Hayne Road Highway 117 N
通过组合Address_index = 1
与Line_nbr
图17和18,并且还Address_index = 3
与line_nbr 20和21,和Address_index 5 line_nbr 1和2,等....
SQL 新手,并试图弄清楚如何将两列链接在一??起,并在一列中写出客户地址,而不是当前所在的两行。
uj5u.com热心网友回复:
在 SQL Server 2017 上,STRING_AGG()
这很容易:
SELECT CUSTOMER_CODE,
MergedAddress = STRING_AGG(CUSTOMER_ADDRSS, ' ')
WITHIN GROUP (ORDER BY LINE_NBR)
FROM dbo.MyTable
GROUP BY CUSTOMER_CODE, ADDRESS_INDEX;
输出:
CUSTOMER_CODE | 合并地址 |
---|---|
GEW | 3901 城堡海恩路高速公路 117 N |
GEW | 1005 第二街 |
GEW | 3901 城堡海恩路高速公路 117 N |
GEW | 麦卡锡路 465 号 |
GEW | 3901 城堡海恩路高速公路 117 N |
在旧版本上,您将不得不使用更繁琐且效率低下的方法,例如:
SELECT CUSTOMER_CODE,
MergedAddress = RTRIM((SELECT CUSTOMER_ADDRSS ' '
FROM dbo.MyTable AS inside
WHERE inside.ADDRESS_INDEX = outside.ADDRESS_INDEX
ORDER BY LINE_NBR
FOR XML PATH(''), TYPE).value(N'./text()[1]', N'varchar(max)'))
FROM dbo.MyTable AS outside
GROUP BY CUSTOMER_CODE, ADDRESS_INDEX;
该实体Db <>小提琴表演的结果,也应有助于解释为什么后者是如此糟糕的计划。
0 评论