我有3张桌子
用户
ID, UserID, balance, name, email
1 Test1 5.44 Jan jan@mail.com
2 Test2 9.22 Ken kenmail.com
模块
ID, ModuleID, Price, Active (bit)
1 JAlert 2 1
2 jFeed 1 1
3 jCross 4 1
潜在客户
ID, ModuleID, UserID, Timeline (all nvarchar, except ID)
1 jAlert Test1 0A12
2 jAlert Test2 B241
4 jfeed Test2 011A
我需要为所有用户制作一个列表,并且每个用户需要将来自模块的所有Active ModuleID作为列Nam,并且在行中包含时间轴 像
UserID Name Balance Jalert jFeed jCross
Test1 Jan 5.44 0A12 Null Null
Test2 Ken 9.22 B241 011A Null
我已经知道我必须使用Pivot将行转换为列...并且在谷歌上搜索我找到了一种动态创建列头的方法:
SELECT
@cols = ISNULL(@cols + ',','') +
QUOTENAME(ModuleID)
FROM
(SELECT TOP 20 ModuleID
FROM modules
WHERE Active = '1'
ORDER BY SortOrder ASC ) AS Columns;
但我对其他查询有问题:
SET @sql = N'SELECT UID, ' + @cols +
' FROM (select ID, uid, timeline from subscriptions) a
PIVOT (count(id) for timeline IN (' + @cols + ')) AS p '
返回全零,但参数没有意义..
虽然这似乎更合理......
SET @sql = N'SELECT UID, ' + @cols +
' FROM (select ID, uid, timeline from subscriptions) a
PIVOT (count(id) for id IN (' + @cols + ')) AS p '
在从nvarchar
转换为int
问题是我不需要聚合,但似乎枢轴需要这样的功能..
您能提出解决方案或解决方法吗?
由于