2016-07-25 40 views
2

我需要创建一个SQL查询来从DB生成以下输出。如何在这里使用案例

enter image description here

我正在寻找这样的

的条件当week_val是1,那么hour_val应该来自week_val 2排。 否则hour_val来自同一行。

+0

请不要添加评论关于您的问题投票 - 随时给意见,如果你有,最好不是在所有。让人们投票他们会怎么做,特别是如果你在事先没有尝试的情况下提问。 – halfer

回答

1

您可能需要使用子查询CASE Statment

SELECT CASE WHEN week_val =1 THEN (SELECT TOP 1 hour_val FROM TABLE NAME WHERE week_val <> 1) 
     ELSE hour_val 
     END 
FROM TableName 
+0

“week_val <> 1”这看起来不太好 – derloopkat

+0

它与两行 – derloopkat

+0

感谢您的回答 – ManiMuthuPandi

2
SELECT week_val, (CASE week_val 
    WHEN 1 THEN (SELECT hour_val FROM your_tbl WHERE week_val = 2) 
    ELSE hour_val) 
FROM your_tbl; 
1

如果您确定有将与week_val = 2,那么你就可以避免一个子查询的行。

select week_val, 
     case week_val when 1 then lead(hour_val) over (order by week_val) else hour_val end as hour_val 
    from t 
1

也许这 - JOIN代替子查询:

SELECT 
    t1.week_val, 
    CASE t1.week_val WHEN 1 THEN t2.hour_val ELSE t1.hour_val END AS hour_val 
    FROM 
    table_name t1 LEFT JOIN table_name t2 ON t2.week_val = t1.week_val + 1