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

发布于 2021-08-18 19:32:51
当然,我无法测试以下内容,但请查看这是否是您所期望的输出-首先在CTE中合并来自两个表的数据,然后聚合结果:
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时,您已经指定了数据库;您也不应该引用您的列别名-如果您需要迎合特殊字符,例如空格,或者如果使用保留字,您可以将名称括在大括号中,但在您的情况下,它是很好的。
https://stackoverflow.com/questions/68838203
复制相似问题