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 <>小提琴表演的結果,也應有助于解釋為什么后者是如此糟糕的計劃。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/407795.html
標籤:
