SQL - 连接多个 Select 语句
SQL - join multiple Select statements
我正在尝试将四个不同的 select 语句合并为一个语句,以提供所需的输出。
下面可以看到其中的两个陈述(除了 Y.Date_Year 之外,它们与其他陈述相同)
select sum(N.EBIT)/Sum(S.Sales), M.Date_Month from EBIT as N
inner join Date_Year as Y on Y.Date_Year_Id = N.Date_Year_Id
inner join Sales As S on S.Company_Id = N.Company_Id
inner join Date_Month As M on M.Date_Month_Id=N.Date_Month_Id
where Y.Date_Year = 2014 and (N.Date_Month_Id = S.Date_Month_Id And N.Date_Year_Id = S.Date_Year_Id) and N.EBIT <> 0 and S.Sales <> 0
group by M.Date_Month
select sum(N.EBIT)/Sum(S.Sales), M.Date_Month from EBIT as N
inner join Date_Year as Y on Y.Date_Year_Id = N.Date_Year_Id
inner join Sales As S on S.Company_Id = N.Company_Id
inner join Date_Month As M on M.Date_Month_Id=N.Date_Month_Id
where Y.Date_Year = 2015 and (N.Date_Month_Id = S.Date_Month_Id And N.Date_Year_Id = S.Date_Year_Id) and N.EBIT <> 0 and S.Sales <> 0
group by M.Date_Month
他们对 Date_Month 专栏和 EBIT/Sales 专栏给了我不同的看法。截至目前,我必须转到 excel,粘贴不同的值并排列它们,以便它们从开始日期(Date_Month 列中的第一个月)到结束日期([=32 中的上个月) =] 列),然后将不同的 EBIT/Sales 值移动到位置。
第一个语句有从 2012-01-31 到 2015-11-30 的数据,而第二个语句有从 2012-01-31 到 2016-11-30 的数据。我想要一个看起来像下面这样的 table:
Date_Month EBIT/Sales 2014 EBIT/Sales 2015
2012-01-31 0.09 0.10
.... ..... .....
2016-11-30 'Null' 0.098
因此它们在同一个列表中,但只要其中一列没有值,它就会给出 Null。
感谢您的帮助。
P.s 这些是数据中的估计值,因此请不要与 2012-01-31 等中存在的 2014 年值混淆。
您正在寻找条件聚合或数据透视查询。我比较习惯前者,所以这里是:
select
m.date_month,
sum(case when y.date_year = 2014 then n.ebit end) /
sum(case when y.date_year = 2014 then s.sales end) as "EBIT/Sales 2014",
sum(case when y.date_year = 2015 then n.ebit end) /
sum(case when y.date_year = 2015 then s.sales end) as "EBIT/Sales 2015",
sum(case when y.date_year = 2016 then n.ebit end) /
sum(case when y.date_year = 2016 then s.sales end) as "EBIT/Sales 2016",
sum(case when y.date_year = 2017 then n.ebit end) /
sum(case when y.date_year = 2017 then s.sales end) as "EBIT/Sales 2017"
from ebit as n
inner join sales as s on s.company_id = n.company_id
and s.date_month_id = n.date_month_id
and s.date_year_id = n.date_year_id
inner join date_year as y on y.date_year_id = n.date_year_id
inner join date_month as m on m.date_month_id = n.date_month_id
where y.date_year in (2014, 2015, 2016, 2017)
and n.ebit <> 0
and s.sales <> 0
group by m.date_month;
我正在尝试将四个不同的 select 语句合并为一个语句,以提供所需的输出。
下面可以看到其中的两个陈述(除了 Y.Date_Year 之外,它们与其他陈述相同)
select sum(N.EBIT)/Sum(S.Sales), M.Date_Month from EBIT as N
inner join Date_Year as Y on Y.Date_Year_Id = N.Date_Year_Id
inner join Sales As S on S.Company_Id = N.Company_Id
inner join Date_Month As M on M.Date_Month_Id=N.Date_Month_Id
where Y.Date_Year = 2014 and (N.Date_Month_Id = S.Date_Month_Id And N.Date_Year_Id = S.Date_Year_Id) and N.EBIT <> 0 and S.Sales <> 0
group by M.Date_Month
select sum(N.EBIT)/Sum(S.Sales), M.Date_Month from EBIT as N
inner join Date_Year as Y on Y.Date_Year_Id = N.Date_Year_Id
inner join Sales As S on S.Company_Id = N.Company_Id
inner join Date_Month As M on M.Date_Month_Id=N.Date_Month_Id
where Y.Date_Year = 2015 and (N.Date_Month_Id = S.Date_Month_Id And N.Date_Year_Id = S.Date_Year_Id) and N.EBIT <> 0 and S.Sales <> 0
group by M.Date_Month
他们对 Date_Month 专栏和 EBIT/Sales 专栏给了我不同的看法。截至目前,我必须转到 excel,粘贴不同的值并排列它们,以便它们从开始日期(Date_Month 列中的第一个月)到结束日期([=32 中的上个月) =] 列),然后将不同的 EBIT/Sales 值移动到位置。
第一个语句有从 2012-01-31 到 2015-11-30 的数据,而第二个语句有从 2012-01-31 到 2016-11-30 的数据。我想要一个看起来像下面这样的 table:
Date_Month EBIT/Sales 2014 EBIT/Sales 2015
2012-01-31 0.09 0.10
.... ..... .....
2016-11-30 'Null' 0.098
因此它们在同一个列表中,但只要其中一列没有值,它就会给出 Null。
感谢您的帮助。
P.s 这些是数据中的估计值,因此请不要与 2012-01-31 等中存在的 2014 年值混淆。
您正在寻找条件聚合或数据透视查询。我比较习惯前者,所以这里是:
select
m.date_month,
sum(case when y.date_year = 2014 then n.ebit end) /
sum(case when y.date_year = 2014 then s.sales end) as "EBIT/Sales 2014",
sum(case when y.date_year = 2015 then n.ebit end) /
sum(case when y.date_year = 2015 then s.sales end) as "EBIT/Sales 2015",
sum(case when y.date_year = 2016 then n.ebit end) /
sum(case when y.date_year = 2016 then s.sales end) as "EBIT/Sales 2016",
sum(case when y.date_year = 2017 then n.ebit end) /
sum(case when y.date_year = 2017 then s.sales end) as "EBIT/Sales 2017"
from ebit as n
inner join sales as s on s.company_id = n.company_id
and s.date_month_id = n.date_month_id
and s.date_year_id = n.date_year_id
inner join date_year as y on y.date_year_id = n.date_year_id
inner join date_month as m on m.date_month_id = n.date_month_id
where y.date_year in (2014, 2015, 2016, 2017)
and n.ebit <> 0
and s.sales <> 0
group by m.date_month;