【问题标题】:Combine multiple rows data in a single row将多行数据合并到一行中
【发布时间】:2012-09-17 14:32:41
【问题描述】:

我正在尝试将表格转换为更易于使用 Excel 操作的视图。我正在 Sql Server 中创建会计部门可以读取的视图,以便在 Excel 中创建统计信息和其他跨表数据透视表。

当前格式的表格

职业ID |产品编号 |是集团 |是额外的夜晚 |价格 -------------+------------+---------+-------------- -----+------ 1 | 47 | 0 | 0 | 50 2 | 47 | 0 | 1 | 45 3 | 47 | 1 | 0 | 30 4 | 47 | 1 | 1 | 28

我要公开的视图格式

产品编号 |价格 |附加夜 |团购价 |团体额外的夜晚 ----------+--------+------------------+------------+ --------------------- 47 | 50 | 45 | 30 | 28

如何在 Sql Server 2008 R2 中实现这一点?我需要快速查询,因为它将成为更大查询的一部分(使用 CTE)。

目前我想到的唯一方法是包含 4 个子查询以分别获取所有 4 个价格,但我不喜欢这种方法,它会扫描表 4 次。

【问题讨论】:

    标签: sql sql-server sql-server-2008-r2 pivot


    【解决方案1】:
    SELECT ProductId,
    MAX(CASE 
     WHEN IsGroup=0 AND IsAdditionalNight =0 then Price
     END) as [Price],
    MAX(CASE 
     WHEN IsGroup=0 AND IsAdditionalNight =1 then Price
     END) as [AdditionalNight],
    MAX(CASE 
     WHEN IsGroup=1 AND IsAdditionalNight =0 then Price
     END) as [GroupPrice],
    MAX(CASE 
     WHEN IsGroup=1 AND IsAdditionalNight =1 then Price
     END) as [GroupAdditionalNight] 
    
     FROM table1     
    GROUP BY ProductId
    

    或者你也可以使用PIVOT来做同样的事情(我个人发现PIVOT的语法比上面的方法复杂,但是没有性能差异,有些人更喜欢PIVOT)。

    【讨论】:

    • PIVOT干净得多
    • 就这么简单? Demn,我正在有效地尝试学习 PIVOT 方法。有时您会忘记简单的方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多