拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 SQLServer中的组合表列

SQLServer中的组合表列

白鹭 - 2022-01-25 2090 0 0

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 = 1Line_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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *