首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server联合分组依据

SQL Server联合分组依据
EN

Stack Overflow用户
提问于 2021-08-18 19:19:19
回答 1查看 25关注 0票数 0

我正在尝试对由UNION命令连接的两个SELECTS进行分组,并按Data列分组,但我注意到Data列返回两个相等的值,而它应该只返回一个值,所以我在考虑再次按日期对此UNION进行分组,有人能帮我吗?非常感谢你提前

代码:

代码语言:javascript
复制
SELECT
    Tab_Dados_Producao.E3TimeStamp AS Data,
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'PH_07' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'PH_07',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'PH_08' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'PH_08',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'PH_09' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'PH_09',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MDS' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MDS',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MCCMP' THEN  Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MCCMP',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MDCMP'THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MDCMP',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MCF'THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MCF',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'MDF'  THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'MDF',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'ESC_04'  THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'ESC_04',
    ROUND(SUM(CASE WHEN Tab_Dados_Producao.Maquina = 'ESC_RET' THEN Tab_Dados_Producao.Valor ELSE 0 END),2) As 'ESC_RET'
FROM 
    [E3_CERAL].[dbo].[Tab_Dados_Producao]
WHERE
    MONTH((Tab_Dados_Producao.E3TimeStamp)) = '8' 
    AND DAY((Tab_Dados_Producao.E3TimeStamp)) = '16'
GROUP BY 
    Tab_Dados_Producao.E3TimeStamp

UNION 

SELECT
    Tab_Dados_Escolha.E3TimeStamp AS Data,
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'PH_07' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'PH_07',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'PH_08' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'PH_08',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'PH_09' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'PH_09',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MDS' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MDS',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MCCMP' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MCCMP',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MDCMP'THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MDCMP',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MCF'THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MCF',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'MDF'  THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'MDF',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'ESC_04'  THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'ESC_04',
    ROUND(SUM(CASE WHEN Tab_Dados_Escolha.Maquina = 'ESC_RET' THEN Tab_Dados_Escolha.Metrica ELSE 0 END),2) As 'ESC_RET'
FROM 
    [E3_CERAL].[dbo].[Tab_Dados_Escolha]
WHERE
    MONTH((Tab_Dados_Escolha.E3TimeStamp)) = '8' 
    AND DAY((Tab_Dados_Escolha.E3TimeStamp)) = '16'
GROUP BY 
    Tab_Dados_Escolha.E3TimeStamp

EN

回答 1

Stack Overflow用户

发布于 2021-08-18 19:32:51

当然,我无法测试以下内容,但请查看这是否是您所期望的输出-首先在CTE中合并来自两个表的数据,然后聚合结果:

代码语言:javascript
复制
with u as (
    select E3TimeStamp as Data, Maquina, Valor
    from dbo.Tab_Dados_Producao
    where Month((E3TimeStamp)) = '8' and Day((E3TimeStamp)) = '16'
    union 
    select E3TimeStamp, Maquina, Metrica 
    from dbo.Tab_Dados_Escolha
    where Month((E3TimeStamp)) = '8' and Day((E3TimeStamp)) = '16'
)

select Data,
  Round(Sum(case when Maquina = 'PH_07'     then Valor else 0 end),2) as PH_07,
  Round(Sum(case when Maquina = 'PH_08'     then Valor else 0 end),2) as PH_08,
  Round(Sum(case when Maquina = 'PH_09'     then Valor else 0 end),2) as PH_09,
  Round(Sum(case when Maquina = 'MDS'       then Valor else 0 end),2) as MDS,
  Round(Sum(case when Maquina = 'MCCMP'     then Valor else 0 end),2) as MCCMP,
  Round(Sum(case when Maquina = 'MDCMP'     then Valor else 0 end),2) as MDCMP,
  Round(Sum(case when Maquina = 'MCF'       then Valor else 0 end),2) as MCF,
  Round(Sum(case when Maquina = 'MDF'       then Valor else 0 end),2) as MDF,
  Round(Sum(case when Maquina = 'ESC_04'    then Valor else 0 end),2) as ESC_04,
  Round(Sum(case when Maquina = 'ESC_RET'   then Valor else 0 end),2) as ESC_RET'
from u
group by data

请注意,您不应该使用由三部分组成的名称-当您连接到SQL Server时,您已经指定了数据库;您也不应该引用您的列别名-如果您需要迎合特殊字符,例如空格,或者如果使用保留字,您可以将名称括在大括号中,但在您的情况下,它是很好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68838203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档