【问题标题】:Condense Records in SQL ServerSQL Server 中的压缩记录
【发布时间】:2019-11-02 04:21:30
【问题描述】:

我正在尝试使用产品 1 和 2 或 1 和 3 的组合来查找订单数量。现在我有数据,但它没有将记录合并为一个,这是我需要的。

我使用案例语句来获取每个订单的计数,然后将其导入 Excel 进行分析。

select  
b.Order, 
CASE when Style in ('2','3') then '1' else '0' end as Pants,
CASE when Style = '1' then '1' else '0' end as Tunic
FROM a
INNER JOIN b ON a.join1 = b.join1 
INNER JOIN c ON b.join2 = c.join2
 WHERE Style IN ('1','2','3')
 group by b.order, Style
 order by b.order

示例输出电流:

order        pants        tunic
abc            1            0
abc            0            1

所需输出示例:

order        pants        tunic
abc            1            1

【问题讨论】:

  • 表格是什么样子的?

标签: sql sql-server excel duplicates case


【解决方案1】:

使用聚合

select  
b.Order, 
sum(CASE when Style in ('2','3') then 1 else 0 end) as Pants,
sum(CASE when Style = '1' then 1 else 0 end) as Tunic
FROM a
INNER JOIN b ON a.join1 = b.join1 
INNER JOIN c ON b.join2 = c.join2
 WHERE Style IN ('1','2','3')
 group by b.order, Style
 order by b.order

顺便说一句,Style 的数据类型是什么,因为你在条件下使用了引号,如果它是字符串类型就可以,但如果它是 int,那么它应该是 style=1style in (1,2,3)

【讨论】:

    【解决方案2】:

    您需要条件聚合。对于指标,使用max(),对于计数,使用sum()

    select b.Order, 
           max(case when Style in (2, 3) then 1 else 0 end) as Pants,
           max(case when Style = 1 then 1 else 0 end)  as Tunic
    from a join
         b 
         on a.join1 = b.join1 join
         c
         on b.join2 = c.join2
    where style in (1, 2, 3)
    group by b.order
    order by b.order;
    

    注意事项:

    • 修复是从group by 中删除style 并在select 中添加聚合函数。
    • 请勿在数字周围使用单引号。
    • 我假设style 是一个数字,而不是一个字符串,所以我删除了单引号。如果它确实是一个字符串,则使用单引号。
    • order 是一个非常糟糕的列名称,因为它是一个 SQL 关键字。

    【讨论】:

    • 我从 group by 中删除了 Style 并使用 MAX 而不是 SUM,因为它是一个 varchar 并且它有效。谢谢!
    • @joe 。 . .您是要计算值还是仅添加 0/1 指标?
    • 获取组合是否被购买的指标,然后带入excel进行分析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多