我有麻煩搞清楚如何合併或支點上的SQL記錄看起來像這樣:凝聚和支點TSQL
ID VALUE GROUP
3 John 18
4 Smith 18
5 Microsoft 18
3 Randy 21
4 Davis 21
5 IBM 21
etc
,我想格式化這個
NEWVALUE GROUP
Smith, John (Microsft) 18
Davis, Randy (IBM) 21
感謝狀任何建議和幫助!
我有麻煩搞清楚如何合併或支點上的SQL記錄看起來像這樣:凝聚和支點TSQL
ID VALUE GROUP
3 John 18
4 Smith 18
5 Microsoft 18
3 Randy 21
4 Davis 21
5 IBM 21
etc
,我想格式化這個
NEWVALUE GROUP
Smith, John (Microsft) 18
Davis, Randy (IBM) 21
感謝狀任何建議和幫助!
這是我做了什麼,我希望它適合你
DECLARE @t table (id int, value VARCHAR(20), grupo int)
INSERT @T VALUES (3, 'John', 18)
INSERT @T VALUES (4, 'Smith', 18)
INSERT @T VALUES (5, 'Microsoft', 18)
INSERT @T VALUES (3, 'Randy', 21)
INSERT @T VALUES (4, 'Davis', 21)
INSERT @T VALUES (5, 'IBM', 21)
SELECT grupo, (SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 4) + ', ' +
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 3) + ' (' +
(SELECT value FROM @t t2 WHERE t2.grupo = t.grupo AND id = 5) + ')'
FROM @t t
GROUP BY grupo
你需要什麼不是樞軸式查詢,而是一個簡單的選擇與分組依據和聚合字符串連接功能。但我不記得tsql中的確切函數。
更新:在tsql中沒有聚合級聯函數,但自從sql2005開始,你可以編寫自己的擴展來實現這樣的功能。谷歌搜索有很多例子:tsql 2005 concatenation集合示例。
SELECT LEFT(gvalue, LEN(gvalue) - 1) AS newvalue, _group
FROM (
SELECT DISTINCT _group
FROM mytable
) qo
CROSS APPLY
(
SELECT value + ', '
FROM mytable qi
WHERE qi._group = qo._group
FOR XML PATH ('')
) gr(qvalue)
如果你總是有一組的三個硬編碼ID
每個_group
,你可以使用:
SELECT m3._group, m3.value + ', ' + m4.value + '(' + m5.value + ')' AS newvalue
FROM mytable m3
LEFT JOIN
mytable m4
ON m4._group = m3.group
LEFT JOIN
mytable m5
ON m5._group = m3.group
WHERE m3.id = 3
AND m4.id = 4
AND m5.id = 5
這是一個小問題,但我認爲它應該適合小數據集。如果你有很多數據,你需要創建一個遊標和一個循環。
select max(case when ID = 4 then VALUE else null end) + ', ' +
max(case when ID = 4 then VALUE else null end) + '(' +
max(case when ID = 5 then VALUE else null end) + ') as NEWVALUE,
[GROUP]
group by [GROUP]
您使用的是什麼SQL環境?標準的SQL不能做到這一點,但是存在許多專有的方法來解決這個問題。 – Tomalak 2009-04-07 16:21:31
你能說出爲什麼三個不同但相關的東西(名字,姓氏,公司)位於不同行的同一列中嗎?或者它只是一個選擇不好的例子? – Tomalak 2009-04-07 16:33:42