考虑以下查询和结果集:
Select udbA.userId, d.dbName
from user_db_access udbA
Inner join dbList d on d.dbid = udbA.dbid
Order By udbA.userId
1盎司
1 nc_west
1个bsc_mo
1个NS_002
我正在寻找一种将其整理成一个记录的方法。我知道我可以使用临时表并选择它,但是我很好奇查询是否可以直接执行。一个用户最多可以使用15个数据库。
寻找类似下面的结果(2列-userid和数据库名称):
用户名dbname
1 az nc_west bsc_mo NS_002
SQL Server版本:Microsoft SQL Server 2012(SP3)(KB3072779)-11.0.6020.0(X64)2015年10月20日15:36:27版权所有(c)Windows NT 6.3(内部版本9600)上的Microsoft Corporation Enterprise Edition(64位): )(管理程序)
假设您要使用空格分隔的数据库名称列表:
DECLARE @Access table ( userId int, dbName varchar(50) );
INSERT INTO @Access VALUES
( 1, 'az' ), ( 1, 'nc_west' ), ( 1, 'bsc_mo' ), ( 1, 'NS_002' );
SELECT DISTINCT
ax.userId, db.list
FROM @Access AS ax
OUTER APPLY (
SELECT LTRIM ( (
SELECT ' ' + dbName AS "text()" FROM @Access AS x WHERE x.userId = ax.userId
FOR XML PATH ( '' )
) ) AS list
) AS db;
退货
+--------+--------------------------+
| userId | list |
+--------+--------------------------+
| 1 | az nc_west bsc_mo NS_002 |
+--------+--------------------------+
对于以逗号分隔的列表:
SELECT DISTINCT
ax.userId, db.list
FROM @Access AS ax
OUTER APPLY (
SELECT STUFF ( (
SELECT ',' + dbName AS "text()" FROM @Access AS x WHERE x.userId = ax.userId
FOR XML PATH ( '' )
), 1, 1, '' ) AS list
) AS db;
退货
+--------+--------------------------+
| userId | list |
+--------+--------------------------+
| 1 | az,nc_west,bsc_mo,NS_002 |
+--------+--------------------------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句