0

网站新手,不熟悉编写 SQL 查询,并且没有这类事情的背景。但我一直在用谷歌搜索我的胜利之路。

我正在努力解决一个可能非常简单的问题。我想对一列的内容求和,如果行中的不同值与另一行中的值相同......那措辞很糟糕 - 插图怎么样:

Input Table

 1.  ID Value 
 2.  1  1000
 3.  11 600
 4.  11 1000
 5.  11 110
 6.  11 300
 7.  3  999
 8.  3  1
 9.  4  500
 10. 4  400
 11. 5  1200
 12. 6  1050
 13. 6  100

所以基本上我正在寻找一个输出,当我运行脚本时显示 Value must >= 1000 after sum up with unit ID. 如果第一个值达到 1000,则再次显示 Unit ID。指标字段将显示“Y”是值 > = 1000。预期输出结果:

 1. ID  Value                 Ind
 2. 1   1000                    Y
 3. 11  1000                    Y
 4. 11  1010 (600+110+300)      N
 5. 3   1000 (999+1)            N
 6. 5   1200                    Y
 7. 6   1150 (1050+100)         Y

还有其他各种简单的查询,但在这一点上,我愿意承认我不知道自己在做什么。

任何帮助将不胜感激,谢谢!

我已经尝试过, Select ID,sum(Value) from table group by ID having sum(value)>= 1000但将以下结果返回给我

    ID   Sum(Value)
    3       1000
    5       1200    
    1       1100        
   11       2010
    6       1050

Id 不保留值为 1010 和 1000 的 2 行。知道如何保留吗?

尝试了 Radu Gheorghiu 的 SQL 建议,但看起来不像我预期的那样工作。SQL:

Select ID,sum(value),‘N' from table where value >= 1000 group by ID
UNION
Select ID, value,'Y' from table where value >= 1000

输出结果:

ID SUM(VALUE) Constant Value
5  1200        N
1  1000        N
11 1000        N
6  1000        N
1  1000        Y
11 1000        Y
5  1200        Y
6  1050        Y

谢谢霍根,已经尝试了霍根的 SQL 建议,但看到的效果不如我预期的那样。ID 6 元素值没有与 (1050+100) 相加为 1150

sql:

-- Select items over 1000
SELECT ID, value, 'Y' AS Ind
FROM table
WHERE value >= 1000
UNION ALL
-- Select sum of the other items where total is >= 1000
SELECT ID, SUM(value) AS value, 'N' AS ind
FROM table
WHERE value < 1000
GROUP BY ID
HAVING SUM(value) >= 1000

Output result:
   ID SUM(value) Constant Value
     1 1000       Y       
    11 1000       Y
     5 1200       Y
     6 1050       Y (should be 1150)
     3 1000       N 
    11 1010       N  

感谢霍根的回答。

在与我的客户再次审查预期输出后,他们确认并提出新要求,如下所示:

Input Table:
     1.  ID Value 
     2.  1  20
     3.  1  30
     4.  1  20
     5.  1  30
     6.  1  10
     7.  2  51
     8.  3  50
     9.  4  20
     10. 4  30
     11. 4  10
     12. 4  5
     13. 4  50
     14. 5  5
     15. 5  50
     16. 6  5 
     17. 6  3
     18. 6  50
     19. 7  35
     20. 7  4

任何 ID 值聚合 >= 50 都需要显示,并且指标标志显示为“Y”,只有一个 ID 值 >= 50。

预期输出:

 1.  ID Value                IND
 2.  1  110(20+30+20+30+10)   N
 3.  2  51                    Y  
 4.  3  50                    Y          
 5.  4  115(20+30+10+5+50)    N  
 6.  5  55 (50+5)             N  
 7.  6  58 (50+8)             N

谢谢任何专家可以建议?我不介意创建另一个工作表来满足我的预期结果。

4

3 回答 3

0

有了疯狂的新要求:

WITH over1000 AS    -- Select items over 1000
(
  SELECT ID, value 
  FROM table
  WHERE value >= 1000
), sumOver1000 AS -- Select sum of the other items where total is >= 1000
(
  SELECT ID, SUM(value) AS value, 'N' AS ind
  FROM table
  WHERE value < 1000
  GROUP BY ID
  HAVING SUM(value) >= 1000
), over1000andOthers AS -- Add in "missed" items
(
  SELECT ID, sum(value) AS value, 'Y' AS ind
  FROM
  (
    SELECT ID, value 
    FROM over1000 
    UNION
    SELECT ID, value 
    FROM table
    WHERE ID in (SELECT ID FROM over1000) -- probably not needed should be in one table or the other.
      AND NOT (ID in (SELECT ID FROM sumOver1000))
  ) sub
)
SELECT * 
FROM over1000andOthers
UNION ALL
SELECT *
FROM sumOver1000

首先是要求。我相信您的要求如下:

给定每个 ID 的 ID 和值列表

  • 如果存在大于或等于 1000 的元素,则使用 Y 指示标志输出该 ID 和值
  • 对于所有其他项目,将这些项目相加。如果总和大于或等于 1000,则输出该 ID、总和和 N 指示标志。

这些要求的问题

  • 如果有多个 ID 元素大于 1000 怎么办?对于以下内容,我假设只有一个。
  • 没有关于输入顺序的陈述——一个关于指标依赖于“第一个”项目的神秘陈述使情况更加复杂。我暂时忽略这个。如果你能解释是什么让一个项目“首先”,那么我可以把它放在查询中。
  • 结果排序,输出排序重要吗?
  • 您的预期结果与这些要求不符。鉴于上述要求,我希望您的结果是:

    ID Value Ind
    1  1000  Y     (This shows as 1100 in your example)
    11 1000  Y
    11 1010  N     (This shows as 1100 in your example)
    3  1000  N
    5  1200  Y
    6  1050  Y     (This shows as 1100 in your example)
    

我将假设您只是犯了一个错误,而我上面的内容就是您想要的。

以下是您在 DB2 中的操作方式

-- Select items over 1000
SELECT ID, value, 'Y' AS Ind
FROM table
WHERE value >= 1000
UNION ALL
-- Select sum of the other items where total is >= 1000
SELECT ID, SUM(value) AS value, 'N' AS ind
FROM table
WHERE value < 1000
GROUP BY ID
HAVING SUM(value) >= 1000
于 2013-06-23T15:13:23.753 回答
0

这个怎么样:

SELECT  `id` , SUM( value ) AS total, 
CASE 
WHEN value >=1000
THEN  'Y'
ELSE  'N'
END AS YN

FROM  `yourtablename` 
GROUP BY  `id` 
于 2013-06-23T12:19:17.167 回答
0

R1

   A    B   C
   3    1   0
   5    2   3
   5    4   2
   2    6   3

给定表 R1 的结果是什么?

Select R1.A , count(*) from R1 (select A from R1 GROUP BY A ) R2 where R1.A >= R2.A group by R1.A HAVING COUNT (*) > 1;

于 2020-02-11T03:28:18.273 回答