将列 Headers 转换为行元素

Converting Column Headers to Row elements

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

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 列,计数,然后是下 6 headers 的 headers,所以结果如下所示:

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

谢谢。

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

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

关于此的更多信息,您可能会关心 table 中的重复数据,因此一遍又一遍地写入相同的字符串可能会使您的 table 变大。 如果答案中还有其他暗示,UD_Demo_ORG table 中的其他信息,那么您可以规范化 table,创建 payment_dimension table 或其他内容像这样,为您的备选方案提供一个 ID,例如

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

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

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

作为结果集。它也会使查询更快,如果您需要其他信息,则可以加入 table 并获取它。

但是如果您唯一拥有的字段是名称,也许您可​​以在这种情况下将 paymentType 用作 "id"...请考虑一下。如果您分离到维度 table.

,它是可扩展的

进一步阅读的一些参考资料:

  1. http://beginnersbook.com/2015/05/normalization-in-dbms/ "Normalization in DBMS"

  2. http://searchdatamanagement.techtarget.com/answer/What-are-the-differences-between-fact-tables-and-dimension-tables-in-star-schemas "Differences between fact tables and dimensions tables"

试试这个

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 ......