将列标题转换为行元素

时间:2016-10-11 16:23:58

标签: sql sql-server pivot

我有2个表我正在组合并且有效但我认为我设计了第二个表错了,因为我有一个列,每个项目的实际上是一个多项选择题。查询是这样的:

select Count(n.ID) as MemCount, u.Pay1Click, u.PayMailCC, u.PayMailCheck, u.PayPhoneACH, u.PayPhoneCC, u.PayWuFoo
from name as n inner join
UD_Demo_ORG as u on n.ID = u.ID
where n.MEMBER_TYPE like 'ORG_%' and n.CATEGORY not like '%_2' and 
(u.Pay1Click = '1' or u.PayMailCC = '1' or u.PayMailCheck = '1' or u.PayPhoneACH = '1' or u.PayPhoneCC = '1' or u.PayWuFoo = '1')
group by u.Pay1Click, u.PayMailCC, u.PayMailCheck, u.PayPhoneACH, u.PayPhoneCC, u.PayWuFoo

结果如下:

Count Pay1Click   PayMailCC   PayMailCheck   PayPhoneACH   PayPhoneCC   PayWuFoo
8      0           0          0              0             0            1
25     0           0          0              0             1            0
8      0           0          0              1             0            0
99     0           0          1              0             0            0
11     0           1          0              0             0            0

所以问题是,我怎样才能将它变为2列,Count,然后是接下来的6个标题的标题,所以结果如下所示:

Count PaymentType
8      PayWuFoo        
25     PayPhoneCC          
8      PayPhoneACH         
99     PayMailCheck        
11     PayMailCC           

感谢。

2 个答案:

答案 0 :(得分:0)

我认为你确实在第二张表的结构中犯了一个错误。我建议不要为每个多项选择问题创建一行,而是将所有这些列转换为“答案”列,这样您就可以将备选项的实际名称作为该列中的记录。

但为此,您必须更改表的结构,并更改表的填充方式。您应该检查备选方案的名称并将其放入您的表格中。

更多相关信息,您可以关注表格中的重复数据,因此一遍又一遍地写相同的字符串可能会使您的表格变得更大。 如果在UD_Demo_ORG表中有其他隐含的答案,其他信息,那么您可以规范化表格,创建payment_dimension表或类似的东西,给你的替代品一个ID,如

ID   PaymentType   OtherInfo(description, etc)...
1     PayWuFoo         ...
2     PayPhoneCC       ... 
3     PayPhoneACH      ...
4     PayMailCheck     ...
5     PayMailCC        ...

这称为维度表,然后在您的记录中,您将拥有付款类型的ID,而不是您不需要的信息。 因此,不是一个大的结果集,也许你可以简化你的查询并只有

Count PaymentId
8      1        
25     2          
8      3         
99     4        
11     5 

作为结果集。它会使查询更快,如果你需要其他信息,你可以加入表并获得它。

但是如果您拥有的唯一字段是名称,也许您可​​以在这种情况下使用paymentType作为“id”...只需考虑它。如果您分隔维度表,它是可扩展的。

进一步阅读的一些参考文献:

  1. http://beginnersbook.com/2015/05/normalization-in-dbms/“DBMS中的规范化”

  2. http://searchdatamanagement.techtarget.com/answer/What-are-the-differences-between-fact-tables-and-dimension-tables-in-star-schemas“事实表和维度表之间的差异”

答案 1 :(得分:0)

试试这个

Select Count,

CASE WHEN Pay1Click=1 THEN 'Pay1Click'
           PayMailCC=1 THEN ' PayMailCC'
          PayMailCheck=1 THEN 'PayMailCheck'
          PayPhoneACH=1 THEN 'PayPhoneACH'
          PayPhoneCC=1 THEN 'PayPhoneCC'
          PayWuFoo=1 THEN 'PayWuFoo'
     END as PaymentType

FROM ......