求助大神,怎么將相同分組的其他列組合起來?
有這樣一組原始資料:
單號 序號 影響因素 影響原因 部門意見
2021010701 001 材料影響
2021010701 001 料 工裝影響
2021010701 001 人 缺人員
2021010702 001 材料影響
2021010702 002 料 無坯件
當單號與序號相同時,將后面三列的資料組合起來,且每個欄位用符號間隔開,空資訊就不用符號,已存在或重復的不資訊不疊加:
單號 序號 影響因素 影響原因 部門意見 匯總影響資訊
2021010701 001 料 | 人 工裝影響 | 缺人員 材料影響 料 | 人 + 工裝影響 | 缺人員 + 材料影響
2021010702 001 材料影響 材料影響
2021010702 002 料 無坯件 料 + 無坯件
uj5u.com熱心網友回復:
用STRING_AGG函式uj5u.com熱心網友回復:
CREATE TABLE #A(
ORDERID INT,
ID INT,
FACTORS VARCHAR(20),
CAUSES VARCHAR(20),
DEPT_REMARK VARCHAR(20)
)
INSERT INTO #A VALUES (2021010701,1,'','','材料影響')
INSERT INTO #A VALUES (2021010701,1,'料','工裝影響','')
INSERT INTO #A VALUES (2021010701,1,'人','缺人員','')
INSERT INTO #A VALUES (2021010702,1,'','','材料影響')
INSERT INTO #A VALUES (2021010702,2,'料','無坯件','')
SELECT XX.ORDERID,XX.ID,XX.FACTORS,XX.CAUSES,XX.DEPT_REMARK,
ISNULL(
(CASE XX.FACTORS WHEN NULL THEN '' ELSE XX.FACTORS END)+
(CASE XX.CAUSES WHEN NULL THEN '' ELSE '+'+XX.CAUSES END),'')+
ISNULL(XX.DEPT_REMARK,'')
FROM (
SELECT A.ORDERID,A.ID,
STUFF((SELECT (CASE B.FACTORS WHEN '' THEN '' ELSE '/'+B.FACTORS END) FROM #A B WHERE A.ORDERID = B.ORDERID AND A.ID = B.ID FOR XML PATH ('')),1,1,'') FACTORS,
STUFF((SELECT (CASE B.CAUSES WHEN '' THEN '' ELSE '/'+B.CAUSES END) FROM #A B WHERE A.ORDERID = B.ORDERID AND A.ID = B.ID FOR XML PATH ('')),1,1,'') CAUSES,
STUFF((SELECT (CASE B.DEPT_REMARK WHEN '' THEN '' ELSE '/'+B.DEPT_REMARK END) FROM #A B WHERE A.ORDERID = B.ORDERID AND A.ID = B.ID FOR XML PATH ('')),1,1,'') DEPT_REMARK
FROM #A A GROUP BY A.ORDERID,A.ID)XX
DROP TABLE #A
uj5u.com熱心網友回復:
重復的不資訊不疊加,怎么處理?單號 序號 影響因素 影響原因 部門意見
2021010701 001 材料影響
2021010701 001 料 工裝影響
2021010701 001 人 缺人員
2021010701 001 料 采購缺貨
第3列的第2行與第4行‘料’重復的,影響因素能否實作不重復?
單號 序號 影響因素 影響原因 部門意見 匯總影響資訊
2021010701 001 料 | 人 工裝影響 | 缺人員 | 采購缺貨 材料影響 料 | 人 + 工裝影響 | 缺人員 | 采購缺貨 + 材料影響
uj5u.com熱心網友回復:
加distinct
CREATE TABLE #A(
ORDERID INT,
ID INT,
FACTORS VARCHAR(20),
CAUSES VARCHAR(20),
DEPT_REMARK VARCHAR(20)
)
INSERT INTO #A VALUES (2021010701,1,'','','材料影響')
INSERT INTO #A VALUES (2021010701,1,'料','工裝影響','')
INSERT INTO #A VALUES (2021010701,1,'人','缺人員','')
INSERT INTO #A VALUES (2021010702,1,'','','材料影響')
INSERT INTO #A VALUES (2021010701,1,'料','無坯件','')
SELECT XX.ORDERID,XX.ID,XX.FACTORS,XX.CAUSES,XX.DEPT_REMARK,
ISNULL(
(CASE XX.FACTORS WHEN NULL THEN '' ELSE XX.FACTORS END)+
(CASE XX.CAUSES WHEN NULL THEN '' ELSE '+'+XX.CAUSES END),'')+
ISNULL(XX.DEPT_REMARK,'')
FROM (
SELECT A.ORDERID,A.ID,
STUFF((SELECT DISTINCT (CASE B.FACTORS WHEN '' THEN '' ELSE '/'+B.FACTORS END) FROM #A B WHERE A.ORDERID = B.ORDERID AND A.ID = B.ID FOR XML PATH ('')),1,1,'') FACTORS,
STUFF((SELECT DISTINCT (CASE B.CAUSES WHEN '' THEN '' ELSE '/'+B.CAUSES END) FROM #A B WHERE A.ORDERID = B.ORDERID AND A.ID = B.ID FOR XML PATH ('')),1,1,'') CAUSES,
STUFF((SELECT DISTINCT (CASE B.DEPT_REMARK WHEN '' THEN '' ELSE '/'+B.DEPT_REMARK END) FROM #A B WHERE A.ORDERID = B.ORDERID AND A.ID = B.ID FOR XML PATH ('')),1,1,'') DEPT_REMARK
FROM #A A GROUP BY A.ORDERID,A.ID)XX
DROP TABLE #A
uj5u.com熱心網友回復:
借用#2的資料
CREATE TABLE #A(
ORDERID INT,
ID INT,
FACTORS VARCHAR(20),
CAUSES VARCHAR(20),
DEPT_REMARK VARCHAR(20)
)
INSERT INTO #A VALUES (2021010701,1,'','','材料影響')
INSERT INTO #A VALUES (2021010701,1,'料','工裝影響','')
INSERT INTO #A VALUES (2021010701,1,'人','材料影響','')
INSERT INTO #A VALUES (2021010702,1,'','','材料影響')
INSERT INTO #A VALUES (2021010702,2,'料','無坯件','')
SELECT *,ISNULL(FACTORS+'+','')+ISNULL(CAUSES+'+','')+ISNULL(DEPT_REMARK+'+','')
FROM
(SELECT DISTINCT ORDERID,ID,
STUFF((SELECT DISTINCT '|'+FACTORS FROM #A WHERE A.ORDERID=ORDERID AND A.ID=ID AND FACTORS<>'' FOR XML PATH('')),1,1,'') AS FACTORS,
STUFF((SELECT DISTINCT '|'+CAUSES FROM #A WHERE A.ORDERID=ORDERID AND A.ID=ID AND CAUSES<>'' FOR XML PATH('')),1,1,'') AS CAUSES,
STUFF((SELECT DISTINCT '|'+DEPT_REMARK FROM #A WHERE A.ORDERID=ORDERID AND A.ID=ID AND DEPT_REMARK<>'' FOR XML PATH('')),1,1,'') AS DEPT_REMARK
FROM #A A) AS B
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/246012.html
標籤:疑難問題
上一篇:列印機連接和檔案共享
