需要有关SQL查询脚本的帮助吗

需要有关SQL查询脚本的帮助吗,sql,db2,Sql,Db2,网站新手,编写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

网站新手,编写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
因此,基本上,当我运行显示的脚本时,我正在寻找一个输出 与单位ID相加后,值必须大于等于1000。如果第一个值达到1000,则再次显示单位ID 当值大于等于1000时,指示器字段将显示“Y”。 预期产出结果:

 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
和其他各种简单的问题,但在这一点上,我愿意承认,我不知道我在做什么

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

我已经试过了 从表group by ID中选择ID,sumValue,其sumValue>=1000,但返回下面的结果

    ID   Sum(Value)
    3       1000
    5       1200    
    1       1100        
   11       2010
    6       1050
Id不使用值为1010和1000的两行代码。你知道怎么省钱吗

我已经尝试了Radu Gheorghiu的SQL建议,但似乎并没有达到我预期的效果。 SQL:

输出结果:

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
谢谢霍根, 我已经尝试了Hogan it提供的SQL建议,但发现并没有达到我预期的效果。 ID 6元素值的总和为1150和1050+100

sql:

需要显示值>=50的任何聚合ID,并且对于一个ID值>=50,指示器标志显示为Y

预期产出:

 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
谢谢 任何专家都可以提供建议吗?我不介意创建另一个工作表来满足我的预期结果

这个怎么样:

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

FROM  `yourtablename` 
GROUP BY  `id` 

有了疯狂的新要求:

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
我假设你犯了一个错误,我上面所说的就是你想要的

下面是如何在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
R1

根据表格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;

ng

这并不能解决问题,因为需要分割结果。如果有四行应该用相等的id求和,并且前两行的和大于等于1000,那么对于相同的id,必须至少有第二个结果。您可以在解析结果时确定Y或N。您已经有了这些值。好的。。。自从你澄清了这个问题,我又重读了一遍。看起来您希望按第三列对其进行分组。此问题不会给出与id 11和1相同的结果。第一部分是对>=1000的每个条目进行排序。在此之后,你需要对其他列进行汇总。但是我无法想象一种简单的技术,如果达到一个定义的值,就停止求和。为什么ID1得到的值是1100,而没有指标-我认为应该是1000,如果第一个值{你是指这里的求和},那么单位id会再次显示,这很难做到hit 1000这个问题显然不适合SQL—在迭代语言中它会快得多。在select语句中,您可能需要一个游标。您使用的是什么平台?MySql、MS Server、Oracle、DB2?我在AS400平台上使用DB2这是我的要求。1为安全起见,一个ID元素可以大于1000。2输出结果无需按顺序排列,可稍后排序。3我的期望结果显示ID元素1110600+300+110的总和输入错误。@DumAco 600+300+110=1010不是1110我已经尝试过你的sql,ID 6应该显示为11501050+100。@DumAco,这正是我的问题。为什么ID是61150?1050大于1000,因此应根据上述要求返回。我看到的唯一方法不是,如果存在一个排序,其中值的总和很重要,并且在1050之前读取100。如果是这种情况,那么您必须说明需求是什么。正如他们所说,我上面的代码给出了正确的结果。嗨,霍根,根据你之前的理解,结果是正确的,但我认为你可能错过了案例Id 6。我的需求的Sry没有明确说明,对于Id 6,它应该是1150,因为Id 6处的值是100,而不是>=1000,因此需要用值>=1000求和。
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 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)
-- 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
   A    B   C
   3    1   0
   5    2   3
   5    4   2
   2    6   3
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;