将列 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.
,它是可扩展的
进一步阅读的一些参考资料:
http://beginnersbook.com/2015/05/normalization-in-dbms/ "Normalization in DBMS"
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 ......
我有 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.
,它是可扩展的进一步阅读的一些参考资料:
http://beginnersbook.com/2015/05/normalization-in-dbms/ "Normalization in DBMS"
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 ......