iT邦幫忙

0

MSSQL2014 文字處理

希望畫面
A1 月日 (已完成)
A2 總金額 (已完成)
A3 {投組入帳明細} &#13
【投組001】共入帳3000元 &#13
基金001 入帳1500元 &#13
基金002 入帳1500元 &#13
&#13
【投組002】共入帳1000元 &#13
基金001 入帳500元 &#13
基金002 入帳500元 &#13

(&#13是到時候sp跑完會生成xml檔 要換行用的)
【投組XXX】= PortID
基金XXX = FundID

金額部分目前都完成了
目前的select畫面只有
https://ithelp.ithome.com.tw/upload/images/20190522/20113932YDrRTlDpeY.jpg
跪求如何重新組合A3文字

最後畫面 只會有一筆資料
輸入參數只會有一個日期 ex A1 只有0522
https://ithelp.ithome.com.tw/upload/images/20190522/20113932wAtciEF4Kz.jpg

A3顯示畫面
https://ithelp.ithome.com.tw/upload/images/20190522/20113932d4Bfp7d97E.jpg

石頭 iT邦研究生 3 級 ‧ 2019-05-22 17:39:04 檢舉
我不建議在MSSQL中 做字串處理
為何不在AP上做
這是一支sp
提供參數A1 A2 A3 還有一些資料
用來跑發簡訊用的
每日某個時間點 會發簡訊通知客戶當日入帳多少 分別是那些商品入帳
建議字串合併由前端AP處理, DB SP原則上越單純越好.(在資料庫欄位內容有長度限制)

1 個回答

2
rogeryao
iT邦高手 7 級 ‧ 2019-05-22 21:33:41
最佳解答

資料不完整,依貼圖內容猜的

SELECT DISTINCT A1,A2,
N'{投組入帳明細}'+'&#13'+REPLACE(LEFT(A3New,len(A3New)),',','&#13') AS A3NewComb
from (
SELECT A1,A2,(SELECT CAST(REPLACE(REPLACE(A3+',','&#13',','),N'{投組入帳明細},','') AS NVARCHAR ) + '' from DetailTable TableQ
WHERE TableQ.A1 = TableP.A1 AND TableQ.A2=TableP.A2
FOR XML PATH('')) AS A3New
FROM DetailTable TableP
WHERE 1=1
) AS TableR
WHERE 1=1
-- 0522 Only
AND A1='0522'
ORDER BY A1,A2

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=5879a5fd715fa117bf0756f7103f41dc

以上解法第 2 階 PD6722 會重覆顯示,改為以下解法(程式碼過長,不在此列出)
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=46742b76ec8dca9e86c92c57731810a8

(按太快 刪除)

感謝rogeryao
正在努力理解原理
另外請問
CREATE TABLE #TABLE_NAME 新增暫存TABLE
及你的方法
CREATE VIEW TABLE_NAME 新增視觀表
兩種有何差異呢?

rogeryao iT邦高手 7 級 ‧ 2019-05-27 14:40:53 檢舉

CREATE TABLE
實體表格,有資料結構(A1 nvarchar(20),...),儲存實體資料.
CREATE VIEW
虛擬表格,無資料結構,無實體資料;資料來自 SQL 指令.
常用時機 : SQL 串接很多 Table 且得到的結果還要當成一個虛擬的 Table 再次多重串接其它 Table

我要發表回答

立即登入回答