【问题标题】:Nested query in sql serversql server 中的嵌套查询
【发布时间】:2019-08-27 07:57:39
【问题描述】:

您好,那么下面的查询在 sql server 数据库上执行选择,问题是总字段计算为所有表的总和,而不是每个表的总和,我如何单独运行帐户?每个表都有一个构造字段,我想根据该字段计算 Totale 字段

查询:

SELECT *
FROM ((SELECT Cantiere.IdCantiere,
              Cliente.RagioneSociale,
              'Preventivo' AS Tipo,
              Cantiere.NomeCantiere,
              Cantiere.StatoCantiere,
              (SELECT (SELECT COALESCE(SUM(Prezzo * Quantita), 0)FROM ArticoloCantiere ) + (SELECT COALESCE(SUM((Kilometri.Kilometri * CostoKilometrico) + DirittoChiamata), 0)
                                                                                           FROM Kilometri ) + (SELECT COALESCE(SUM(CostoNoleggio + Trasporto), 0)FROM Noleggio) + (SELECT COALESCE(SUM(Utente.CostoInterno * ((REPLACE((LEFT(CAST(REPLACE((CONVERT(varchar(5), CAST(CONVERT(varchar(5), (RisorseUmane.OreFine - RisorseUmane.OreInizio), 108) AS datetime) - CAST(REPLACE(RisorseUmane.Pausa, '.', ':') AS datetime), 108)), ':', ',') AS money) / 100, 2)), '.', '')) + (((CAST('0,' + (RIGHT(CAST(REPLACE((CONVERT(varchar(5), CAST(CONVERT(varchar(5), (RisorseUmane.OreFine - RisorseUmane.OreInizio), 108) AS datetime) - CAST(REPLACE(RisorseUmane.Pausa, '.', ':') AS datetime), 108)), ':', ',') AS money) / 100, 2)) AS money) / 100) * 100) / 60))), 0)
                                                                                                                                                                                  FROM RisorseUmane
                                                                                                                                                                                       INNER JOIN Utente ON RisorseUmane.IdUtente = Utente.IdUtente where IdCantiere=@IdCantiere) + (SELECT COALESCE(SUM(Costo), 0)FROM SpeseSostenute where IdCantiere=@IdCantiere) + (SELECT COALESCE(SUM(Costo), 0)FROM Ristorante )) AS Totale
       FROM Cantiere
            INNER JOIN Cliente ON Cantiere.IdCliente = Cliente.IdCliente
            INNER JOIN CantierePreventivo ON CantierePreventivo.IdCantierePreventivo = Cantiere.IdCantiere)
      UNION
      (SELECT Cantiere.IdCantiere,
              Cliente.RagioneSociale,
              'Consuntivo' AS Tipo,
              Cantiere.NomeCantiere,
              Cantiere.StatoCantiere,
              (SELECT (SELECT COALESCE(SUM(Prezzo * Quantita), 0)FROM ArticoloCantiere ) + (SELECT COALESCE(SUM((Kilometri.Kilometri * CostoKilometrico ) + DirittoChiamata), 0)
                                                                                           FROM Kilometri ) + (SELECT COALESCE(SUM(CostoNoleggio + Trasporto), 0)FROM Noleggio ) + (SELECT COALESCE(SUM(Utente.CostoInterno * ((REPLACE((LEFT(CAST(REPLACE((CONVERT(varchar(5), CAST(CONVERT(varchar(5), (RisorseUmane.OreFine - RisorseUmane.OreInizio), 108) AS datetime) - CAST(REPLACE(RisorseUmane.Pausa, '.', ':') AS datetime), 108)), ':', ',') AS money) / 100, 2)), '.', '')) + (((CAST('0,' + (RIGHT(CAST(REPLACE((CONVERT(varchar(5), CAST(CONVERT(varchar(5), (RisorseUmane.OreFine - RisorseUmane.OreInizio), 108) AS datetime) - CAST(REPLACE(RisorseUmane.Pausa, '.', ':') AS datetime), 108)), ':', ',') AS money) / 100, 2)) AS money) / 100) * 100) / 60))), 0)
                                                                                                                                                                                  FROM RisorseUmane
                                                                                                                                                                                       INNER JOIN Utente ON RisorseUmane.IdUtente = Utente.IdUtente ) + (SELECT COALESCE(SUM(Costo), 0)FROM SpeseSostenute ) + (SELECT COALESCE(SUM(Costo), 0)FROM Ristorante )) AS Totale
       FROM Cantiere
            INNER JOIN Cliente ON Cantiere.IdCliente = Cliente.IdCliente
            INNER JOIN CantiereConsuntivo ON CantiereConsuntivo.IdCantiereConsuntivo = Cantiere.IdCantiere)) q
ORDER BY q.Totale DESC;

【问题讨论】:

  • 消耗样本数据,预期结果对我们有很大帮助,对您有帮助。
  • 请更新您的问题并复制/粘贴错误文本/消息,Stackoverflow 中不允许出现图像错误:meta.stackoverflow.com/questions/285551/…

标签: sql-server union


【解决方案1】:

您在所有表格中的总列都是相同的。您必须通过将这些部分的总结果与关联的 Cantiere 行连接起来来计算每个部分的总数。如需更多帮助,请提供您的表格结构和示例数据。

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多