Sql server 带条件和字段
我有下表测试Sql server 带条件和字段,sql-server,Sql Server,我有下表测试 id order hour 我有两种情况: 第一种情况:无事可做 第二种情况: id order hour 1 1 20 1 2 50 1 3 70 2 1 40 2 2 10 2 3 20 2 4 90 3 1 50 我需要去 身份证时间 1 120 //hour total=50+70 for id=1 when order >1 2 120//hour total for=10+20
id order hour
我有两种情况:
第一种情况:无事可做
第二种情况:
id order hour
1 1 20
1 2 50
1 3 70
2 1 40
2 2 10
2 3 20
2 4 90
3 1 50
我需要去
身份证时间
1 120 //hour total=50+70 for id=1 when order >1
2 120//hour total for=10+20+90 id=2 when order >1
3 50 // nothing to do because I have one row for id=3
我怎样才能做这样的事情?请尝试以下方法。id=3的和将是50,因此在这种情况下仍然可以使用SUM
SELECT id, SUM(hour) AS HourTotal
FROM YourTable t1
WHERE [order] > 1 OR
NOT EXISTS (SELECT 1 FROM YourTable t2 WHERE t1.id = t2.id AND [order] > 1)
GROUP BY id
下面的代码正在工作。我已经测试过了。请试一试
select ID,SUM(HourTotal) as hourtotal from (
select id,HourTotal,row_num
from (SELECT id, hour_n AS HourTotal ,ROW_NUMBER() over(partition by id order by id ) row_num
FROM id )a
where a.id!=a.row_num)b
group by id
请尝试下面的代码。它正在工作
select ID,SUM(HourTotal) as hourtotal from (
select id,HourTotal,row_num
from (SELECT id, hour_n AS HourTotal ,ROW_NUMBER() over(partition by id order by id ) row_num
FROM id )a
where a.id!=a.row_num)b
group by id
我不明白投反对票的原因。该问题要求3行的总数作为答案,因为id=3的总数为50。由于id 1和id 2的总数错误,因此被否决-太高了。顺序>1的行不应包括在内,除非是单行(id为3的情况)。他想编辑您自己的答案(我这样说是因为@AdiT试图编辑wdosanjos答案)
select ID,SUM(HourTotal) as hourtotal from (
select id,HourTotal,row_num
from (SELECT id, hour_n AS HourTotal ,ROW_NUMBER() over(partition by id order by id ) row_num
FROM id )a
where a.id!=a.row_num)b
group by id