TSQL Pivot 3表

时间:2015-09-19 04:54:19

标签: sql-server pivot

我有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

期间返回错误

问题是我不需要聚合,但似乎枢轴需要这样的功能..

您能提出解决方案或解决方法吗?

由于

0 个答案:

没有答案