SQL Server中的冷凝记录

时间:2019-06-19 12:18:32

标签: sql sql-server excel duplicates case

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

我使用了case语句来获取每个订单的计数,然后将其引入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

2 个答案:

答案 0 :(得分:0)

使用聚合

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)

答案 1 :(得分:0)

您需要条件聚合。对于指标,请使用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;

注意:

  • 此修复程序是从style中删除group by并在select中添加聚合函数。
  • 请勿在数字周围使用单引号。
  • 我假设style是一个数字,而不是字符串,因此我删除了单引号。如果确实是字符串,则使用单引号。
  • order对于列来说确实是个坏名字,因为它是一个SQL关键字。