mysql - 合并 3 个 SQL 查询的结果?

标签 mysql sql sql-server database

我在尝试合并 3 个查询的结果时遇到了麻烦:

result so far

这是用 union 连接的 3 个查询的结果,除了最后一列之外,它们都在同一个表中选择数据,我希望结果在一行中,在这种情况下会得到结果 17 但是我无法让它工作...有什么想法吗?

谢谢

编辑:这里是上面结果中与 union 一起使用的 3 个查询的代码:

select distinct SSN_ID, 
            TME_ID, 
            TME_LIBELLE, 
            convert(varchar,ssn_date_debut,103) as 'Debut',
            CONVERT (varchar,ssn_date_fin,103) as 'Fin',
            SSN_NB_JOURS,
            COUNT (atr_id) as 'Total'
from SESSION
join INSCRIPTION on INS_SSN_ID = SSN_ID
join ACTEUR on INS_ATR_ID = ATR_ID
join theme on tme_id = ssn_tme_id
join ETAT_SESSION on esn_id = ssn_esn_id
join LIEU_SESSION on LSN_SSN_ID =ssn_id
join LIEU on LEU_ID = LSN_LEU_ID
where INS_DT_CONVOCATION is not null
and SSN_ESN_ID = 15
    and SSN_JOURNEE_ETUDE = 1 
    and LEU_NOM is not null
    and year(ssn_date_debut) = YEAR(GETDATE())
 group by SSN_ID,TME_ID,TME_LIBELLE,ssn_date_debut,ssn_date_fin,SSN_NB_JOURS,ins_ssn_id

union

 select distinct SSN_ID, 
                TME_ID, 
            TME_LIBELLE, 
            convert(varchar,ssn_date_debut,103) as 'Debut',
            CONVERT (varchar,ssn_date_fin,103) as 'Fin',
            SSN_NB_JOURS,
            COUNT (atr_id) as 'Total'
from SESSION
join SESSION_FORMATEUR on ASN_SSN_ID = SSN_ID 
join ACTEUR anim on  anim.ATR_ID = asn_atr_id
join theme on tme_id = ssn_tme_id
join ETAT_SESSION on esn_id = ssn_esn_id
join LIEU_SESSION on LSN_SSN_ID =ssn_id
join LIEU on LEU_ID = LSN_LEU_ID
where SSN_ESN_ID = 15
    and SSN_JOURNEE_ETUDE = 1 
    and LEU_NOM is not null
    and year(ssn_date_debut) = YEAR(GETDATE())

 group by SSN_ID, TME_ID, 
TME_LIBELLE,ssn_date_debut,ssn_date_fin,SSN_NB_JOURS,asn_ssn_id

 union

  select distinct SSN_ID, 
            TME_ID, 
            TME_LIBELLE, 
            convert(varchar,ssn_date_debut,103) as 'Debut',
            CONVERT (varchar,ssn_date_fin,103) as 'Fin',
            SSN_NB_JOURS,
            COUNT (atr_id) as 'Total'
from SESSION
left join INTERVENANT on ITV_SSN_ID = SSN_ID
left join ACTEUR on ITV_ATR_ID = ATR_ID
join theme on tme_id = ssn_tme_id
join ETAT_SESSION on esn_id = ssn_esn_id
join LIEU_SESSION on LSN_SSN_ID =ssn_id
join LIEU on LEU_ID = LSN_LEU_ID
where SSN_ESN_ID = 15
and SSN_JOURNEE_ETUDE = 1 
and LEU_NOM is not null
and year(ssn_date_debut) = YEAR(GETDATE())

 group by SSN_ID, TME_ID, 
TME_LIBELLE,ssn_date_debut,ssn_date_fin,SSN_NB_JOURS,ITV_SSN_ID

最佳答案

在总计列上获取 SUM 的派生查询方法:

SELECT SSN_ID, TIME_ID, TIME_LIBELLE, DEBUT, FIN, SSN_NB_JOURS, SUM(Total) as Total
FROM
(
-- Your original SELECT with UNION
SELECT .. FROM ..
UNION ALL
SELECT .. FROM ..
UNION ALL
SELECT .. FROM ..
) d
GROUP BY SSN_ID, TIME_id, TIME_LIBELLE, DEBUT, FIN, SSN_NB_JOURS

这种方式在mysql和sql server上都应该是有效的语法

关于mysql - 合并 3 个 SQL 查询的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54804323/

相关文章:

SQL:查找表中列值的最高出现次数?

sql-server - 保持两个数据库模式同步的最佳方法是什么?

sql - 将文件存储在不同的数据库中?

php - mysql 查询是否接受换行符转义?

PHP如果我想回显表而不是foreach循环我该怎么办

MYSQL使用其他表

sql - 在 ORACLE 中重命名分区

php - 从结果行获取数组作为字段

php - 增加值按钮 "mrk2"

sql - 转换失败 (SQL Server 2008)