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

时间:2013-06-23 12:16:17

标签: 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  1200
 12. 6  1050
 13. 6  100

所以基本上我在运行显示的脚本时正在寻找输出 在与单元ID相加后,值必须> = 1000。如果第一个值达到1000,则再次显示单元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没有备用2行,其值为1010和1000.任何想法如何备用?

尝试过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

谢谢Hogan, 已经尝试过Hogan的SQL建议,但看到的效果不如我预期的结果。 ID 6元素值没有总和为1150(1050 + 100)

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  

感谢Hogan的回答。

在与我的客户再次审核预期输出后,他们确认并按以下方式提出新要求:

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

需要显示聚合值> gt = 50的任何ID,并且只有一个ID值&gt; = 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

由于 任何专家都可以提供建议吗?我不介意创建另一个工作表来满足我的期望结果。

3 个答案:

答案 0 :(得分:0)

这个怎么样:

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

FROM  `yourtablename` 
GROUP BY  `id` 

答案 1 :(得分: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的元素输出该ID和带有Y指示标志的值
  • 对于所有其他项目总结这些项目。如果总和大于或等于1000,则输出该ID,sum和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

答案 2 :(得分: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;

ng