网站的新手,对编写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
由于 任何专家都可以提供建议吗?我不介意创建另一个工作表来满足我的期望结果。
答案 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和值列表
这些要求存在问题
您的预期结果与这些要求不符。鉴于上述要求,我希望您的结果是:
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