2016-10-11 60 views
0

我有两个表我正在合并,这工作,但我认为我设计了第二个表错了,因为我有一个真正是多项选择问题的每个项目的列。查询是这样的:将列标题转换为行元素

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头头所以结果如下所示:

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

谢谢。

+1

您正在使用哪个'DBMS'。厌倦了写这篇声明:/ –

+0

对不起,我的错。 SQL Server 2012 – Jayson

回答

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

这工作。完全忘记做一个案例陈述。谢谢。 – Jayson

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