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