第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SQL Server中的SQL group_conat函數(shù)

SQL Server中的SQL group_conat函數(shù)

慕婉清6462132 2019-07-13 15:36:28
如果有一個名為Employee的表EmpID           EmpName----------      -------------1               Mary1               John1               Sam2               Alaina2               Edward我需要這種格式的結(jié)果:EmpID           EmpName----------      -------------1               Mary, John, Sam2               Alaina, Edward問:這個記錄是一樣的。Employee桌子。我?guī)缀鯖]有使用UDF,存儲過程的經(jīng)驗(yàn),我需要通過查詢來完成這件事,這不可能不使用UDF,SP的。
查看完整描述

3 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個贊

這個測試場景將說明這一點(diǎn)。

創(chuàng)建臨時表:

CREATE table #temp (EmpId INT, EmpName VARCHAR(100));WITH N(N)AS (SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1))M(N))
,tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a,N b,N c,N d,N e,N f)INSERT #tempSELECT EmpId, EmpName FROM (values(1, 'M
ary'),(1, 'John'),(1, 'Sam')) x(EmpId, EmpName)CROSS APPLY (SELECT top 2000 N FROM tally) yUNION ALLSELECT EmpId, EmpName FROM (valu
es(2, 'Alaina'),(2, 'Edward')) x(EmpId, EmpName)CROSS APPLY(SELECT top 2000 N FROM tally) y

這只有10.000行。但很多相同的空白處。

Oleg的答案中的這個查詢在我的數(shù)據(jù)庫上花費(fèi)了64秒。

SELECT distinct
    EmpId,
    (
        SELECT EmpName+','
        FROM #temp t2        WHERE t2.EmpId = t1.EmpId        FOR XML PATH('')
    ) ConcatenatedFROM #temp t1

在這種情況下,區(qū)分不是清理行的正確方法。為了避免這個笛卡兒連接,在像這樣加入之前減少ID的初始數(shù)量。

這是正確的處理方法:

;WITH CTE as(
  SELECT distinct EmpId  FROM #temp)SELECT 
    EmpId,
    STUFF((
        SELECT ','+EmpName        FROM #temp t2        WHERE t2.EmpId = t1.EmpId        FOR XML PATH('')
    ), 1,1,'') ConcatenatedFROM CTE t1

這需要不到1秒



查看完整回答
反對 回復(fù) 2019-07-13
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個贊

我想沒有GROUP_CONCAT函數(shù)在MSSQL中。

當(dāng)項(xiàng)目數(shù)量較小且預(yù)先已知時,收縮值

SELECT?CategoryId,
???????MAX(?CASE?seq?WHEN?1?THEN?ProductName?ELSE?''?END?)?+?',?'?+
???????MAX(?CASE?seq?WHEN?2?THEN?ProductName?ELSE?''?END?)?+?',?'?+
???????MAX(?CASE?seq?WHEN?3?THEN?ProductName?ELSE?''?END?)?+?',?'?+
???????MAX(?CASE?seq?WHEN?4?THEN?ProductName?ELSE?''?END?)
??FROM?(?SELECT?p1.CategoryId,?p1.ProductName,
????????????????(?SELECT?COUNT(*)?
????????????????????FROM?Northwind.dbo.Products?p2??????????????????
?????????????????????WHERE?p2.CategoryId?=?p1.CategoryId?????????????????????
?????????????????????AND?p2.ProductName?<=?p1.ProductName?)
???????????FROM?Northwind.dbo.Products?p1?)?D?(?CategoryId,?ProductName,?seq?)
?GROUP?BY?CategoryId?;


查看完整回答
反對 回復(fù) 2019-07-13
  • 3 回答
  • 0 關(guān)注
  • 561 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號