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