我有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
感谢。
答案 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 :(得分: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 ......