【发布时间】:2014-07-17 17:50:04
【问题描述】:
我正在尝试将此 Oracle 脚本转换为 T-SQL:
Oracle 代码:
Select Col1, Col2, Col3, Col4,
'BDS: ' || LISTAGG(BD, ' , ') WITHIN GROUP (ORDER BY Col5, Col6) || '.' AS BDs
from(Select Col1, Col2, Col3, Col4, Col5, Col6,
to_char(Col7) || '-' || Col8 || '-' || to_char(Col5) || '-' || to_char(Col6) BD
from TBL1
order by Col6)
Group BY Col1, Col2, Col3, Col4
示例结果:
COl1 | COl2 | COl3 | Col4 | BDS
Z1 | 1 | 12 | 1 | BDS: 1-M-12-6-1 + 1-M-12-6-2 + 1-M-12-6-3
Z1 | 1 | 31 | 1 | BDS: 1-M-31-6-5 + 1-M-31-6-6 + 1-M-31-6-7
到目前为止,我已经尝试过了,
Select
Col1, Col2, Col3, Col4,
'BDS: ' + STUFF (select ' , ' + BD
from TBL1
group by BD
order by Col5, Col6
FOR XML PATH('')), 1, 1, '') + '.' AS BDS
from
(select
Col1, Col2, Col3, Col4, Col5, Col6,
CONVERT(VARCHAR,Col7) + '-' + Col8+ '-' + CONVERT(VARCHAR,Col5) + '-' + CONVERT(VARCHAR,Col6) BD
from TBL1) A1
Group By
Col1, Col2, Col3, Col4, BD
结果:
COl1 | COl2 | COl3 | Col4 | BDS
Z1 | 1 | 12 | 1 | BDS: + 1-M-12-6-1 + 1-M-12-6-1 + 1-M-12-6-1......(repeats for more than 100 times)
Z1 | 1 | 12 | 1 | BDS: + 1-M-12-6-2 + 1-M-12-6-2 + 1-M-12-6-2......(repeats for more than 100 times)
问题:
-
Col3需要有唯一值 -
BDS与Col3中的对应值相同时需要拼接字符串 - 需要从
BDS列中删除第一次出现的+,我认为FOR XML PATH('')), 1, 1, ''会这样做。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: oracle sql-server-2008 tsql concatenation