2014-07-13 85 views
0

子查询SUM我找回两个和值:不同日期

SUM (CASE WHEN CAUSALI.AVAILABLECAUSA_1 LIKE ('%CAUSE-1%') THEN (mtscrap) ELSE 0 END) as Cause1 

SUM (CASE WHEN CAUSALI.AVAILABLECAUSA_1 LIKE ('%CAUSE-2%') THEN (mtscrap) ELSE 0 END) as Cause2 

我想设置另一个SUM声明没有%CAUSE-*,以及具有WHERE子句独立于主哪里。我已经innested这个子查询:

(CASE WHEN day BETWEEN '2014-01-09' AND '2014-06-13' THEN SUM(MTSCRAP) ELSE 0 END) AS XXXXXX 

但我有错误的数据。我的全球查询:

SELECT 
     SezioneID 
    , Desc_Prod 
    , sample.products.VETTURA AS VetturaID 
    , truncate((SUM(mtscrap_1)/SUM(MtProdotti_1)) * 100, 2) AS Scrap_1 
    , truncate((SUM(mtscrap_2)/SUM(MtProdotti_2)) * 100, 2) AS Scrap_2 
    , mtscrap_1 
    , MtProdotti_1 
    , mtscrap_2 
    , MtProdotti_2 
FROM flB.flB_prod AS PROD 
     JOIN SAMPLE.PRODUCTS 
        ON (sample.products.SKU = PROD.SEZIONEID) 
         AND (sample.products.LINEA = 'FLB') 
     JOIN (
        SELECT 
         IDSEZIONE 
         , IDTURNO 
         , ID_PROG 
         , SUM(CASE 
           WHEN AVAILABLECAUSA_1 LIKE ('%CHANGE-1%') THEN mtscrap ELSE 0 
          END) AS mtscrap_1 
         , SUM(CASE 
           WHEN AVAILABLECAUSA_1 LIKE ('%CHANGE-1%') THEN MtProdotti ELSE 0 
          END) AS MtProdotti_1 
         , SUM(CASE 
           WHEN AVAILABLECAUSA_1 LIKE ('%CHANGE-2%') THEN mtscrap ELSE 0 
          END) AS mtscrap_2 
         , SUM(CASE 
           WHEN AVAILABLECAUSA_1 LIKE ('%CHANGE-2%') THEN MtProdotti ELSE 0 
         END) AS MtProdotti_2 
          , MtProdotti 
        FROM FLB.flB_causali 
        WHERE DATASTARTPRG BETWEEN '2014-06-09' AND '2014-06-13' 
        GROUP BY 
         IDSEZIONE 
         IDTURNO 
         , ID_PROG 
      ) AS CAUSALI 
        ON (PROD.SEZIONEID = CAUSALI.IDSEZIONE) 
         AND PROD.TURNO = CAUSALI.IDTURNO 
         AND PROD.ID_PROG = CAUSALI.ID_PROG 
WHERE giorno BETWEEN '2014-06-09' AND '2014-06-13' 
GROUP BY 
     SezioneID 

我需要这样的观点:Required fields

+1

方括号在'[mtscrap]'背叛这是不是MySQL的,而MS SQL Server或MS访问。你的关系数据库真的是什么? –

+0

输入错误对不起。我的RDBMS是MySql –

+0

您在SUM()中使用DISTINCT的尝试向我表明,您的整体查询返回的行太多,并且希望这种区分会为您排序。它不会。 –

回答

0

您是否在寻找这体现在哪里?

SUM(CASE WHEN day BETWEEN '2014-01-09' AND '2014-06-13' THEN MTSCRAP ELSE 0 END) AS XXXXXX 

CASE那张SUM()内有条件的聚集。

+0

你好,我会设置这个表达式,但是检索到的数据不正确,听起来好像WHEN没有任何效力, –

1

我已尽我所能把表或别名放在每个字段参考旁边。在这一点上,我真的不知道我能为你做些什么。我不认为更多的话会有所帮助。

这2个简单的项目将帮助:1. 样本数据 2.预期的结果


因为你没有在非常原始查询的所有字段使用表别名以下是完全猜测,但在原始查询中使用DISTINCT的存在是“太多行”的线索,表明需要在整个查询之前进行分组。所以,这是我第一次的猜测:

SELECT 
     PROD.SezioneID 
    , PROD.Desc_Prod 
    , sample.products.VETTURA AS VetturaID 
    , truncate((SUM(CAUSALI.mtscrap_1)/SUM(CAUSALI.MtProdotti_1)) * 100, 2) AS Scrap_1 
    , truncate((SUM(CAUSALI.mtscrap_2)/SUM(CAUSALI.MtProdotti_2)) * 100, 2) AS Scrap_2 
    , CAUSALI.mtscrap_1 
    , CAUSALI.MtProdotti_1 
    , CAUSALI.mtscrap_2 
    , CAUSALI.MtProdotti_2 
FROM flB.flB_prod AS PROD 
     JOIN SAMPLE.PRODUCTS 
        ON (sample.products.SKU = PROD.SEZIONEID) 
         AND (sample.products.LINEA = 'FLB') 
     JOIN (
        SELECT 
         flB_causali.IDSEZIONE 
         , flB_causali.IDTURNO 
         , flB_causali.ID_PROG 
         , SUM(CASE 
           WHEN flB_causali.AVAILABLECAUSA_1 LIKE ('%CHANGE-1%') THEN flB_causali.mtscrap ELSE 0 
          END) AS mtscrap_1 
         , SUM(CASE 
           WHEN flB_causali.AVAILABLECAUSA_1 LIKE ('%CHANGE-1%') THEN flB_causali.MtProdotti ELSE 0 
          END) AS MtProdotti_1 
         , SUM(CASE 
           WHEN flB_causali.AVAILABLECAUSA_1 LIKE ('%CHANGE-2%') THEN flB_causali.mtscrap ELSE 0 
          END) AS mtscrap_2 
         , SUM(CASE 
           WHEN flB_causali.AVAILABLECAUSA_1 LIKE ('%CHANGE-2%') THEN flB_causali.MtProdotti ELSE 0 
         END) AS MtProdotti_2 
          , flB_causali.MtProdotti 
        FROM FLB.flB_causali 
        WHERE flB_causali.DATASTARTPRG BETWEEN '2014-06-09' AND '2014-06-13' 
        GROUP BY 
         flB_causali.IDSEZIONE 
         flB_causali.IDTURNO 
         , flB_causali.ID_PROG 
      ) AS CAUSALI 
        ON (PROD.SEZIONEID = CAUSALI.IDSEZIONE) 
         AND PROD.TURNO = CAUSALI.IDTURNO 
         AND PROD.ID_PROG = CAUSALI.ID_PROG 
WHERE PROD.giorno BETWEEN '2014-06-09' AND '2014-06-13' 
GROUP BY 
     PROD.SezioneID 
; 
+0

你好,我尝试了你的建议,但是子查询中的'mtscrap_1'和'mtscrap_2'不会计算SELECT选择,不会显示在最终结果集中 –

+0

不,它们不会显示在最终结果中,因为它们构成了最终计算的一部分 - 但这是一个猜测。这个想法是告诉我们,如果猜测是不准确的。子查询 - 本身是否工作? –

+0

好的,我很抱歉,如果我不清楚解释我的问题。我应该在JOIN之后由SELECT语句执行的计算结果指定与外部WHERE子句不同的其他日期。以这种方式进行的查询不能像它应该的那样工作,因为没有显示子查询的结果。 –