从 sql 查询中透视和合并数据

Posted

技术标签:

【中文标题】从 sql 查询中透视和合并数据【英文标题】:Pivoting and merging data from a sql query 【发布时间】:2011-06-13 20:46:13 【问题描述】:

这是我的查询:

SELECT  ad.Name, av.Value AS Attribute1, ctv.Value AS Attribute2
FROM    AttributeDefinitions AS ad WITH (nolock) 
INNER JOIN AttributeValues AS av WITH (nolock) 
ON      ad.AttributeDefinitionID = av.AttributeDefinitionID 
INNER JOIN AttributeCategories 
ON      ad.AttributeCategoryID = AttributeCategories.AttributeCategoryID 
LEFT OUTER JOIN CodeTableValues AS ctv WITH (nolock) 
ON      av.CodeTableValueID = ctv.CodeTableValueID
WHERE   (AttributeCategories.Name = 'Camp') AND (av.AttributeValueGroupID = 9840)

我的结果如下所示:

Name                     Attribute1      Attribute2
Childs Age:              10 
Attended Camp Before?:   Yes
Childs T-Shirt Size:     large           NULL
Allergies Description    none            NULL
Phone #                  212-555-1212    NULL
Pickup                   Mary Jordan     NULL

Name= Name of Attribute Column
Attribute1 = Data is from a free Form
Attribute2 = Data is from a Drop down Menu   

我想做的是旋转数据,以便“名称”列中的信息成为列标题,我需要组合属性 1 和 2 中的值 这就是我的结果应该是这样的:

*Childs Age  Attended Camp Before?  Childs T-Shirt Size  Allergies Description Phone#        Pickup*
10           yes                    large                none                  212-555-1212  Mary Jordan

【问题讨论】:

如果您使用的是 SQL server 2005 或更高版本,您可以使用Pivot 选择哪个属性的逻辑是什么? Attribute1 是否总是优先于 Attribute2? 【参考方案1】:

在 Oracle DB 中,我使用 CASE 语句将行转换为列。

看看这个例子:

选择 event_date ,sum(当 service_type = 'OCSAC_DEG' 然后 service_count 结束时的情况) ocsac_deg ,sum(当 service_type = 'SMS_ONL' 然后 service_count 结束时的情况)sms_onl ,sum(当 service_type = 'SMS_DEG' 然后 service_count 结束时的情况)sms_deg ,sum(当 service_type = 'DATA_ONL' 然后 service_count 结束时的情况) data_onl ,sum(service_type = 'DATA_DEG' 然后 service_count 结束的情况) data_deg 来自统计 其中 to_char(event_date, 'yyyymm') = to_char(add_months(sysdate,-1), 'yyyymm') 按 event_date 分组 按 event_date desc 排序

【讨论】:

以上是关于从 sql 查询中透视和合并数据的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 数据透视查询

使用 Sql Developer Oracle 的动态数据透视查询

Sql Server 聚合或数据透视表查询

合并数据透视表中的两列

SQL 查询某字段数据所在的表

动态透视查询查看/存储过程?