我正在尝试使用产品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
答案 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=1
和style 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关键字。