2017-03-16 65 views
1

我在没有主键的表上有一个简单的选择。我正在提取365个值,每年有一个值。我可以在SQL Server 2008 R2中执行此操作吗?我希望添加另一个名为rain的列,并使用每周一个值或每七行填充一个值。我当前的查询是:每n行返回一个列值

SELECT jDay, tMax, tMin 
FROM tableName; 

它只返回前三列。如何实现雨柱,使它看起来像这样:

jDAy tmax tmin rain 
11 21.1 10.1  0  
12 22.1 11.1  0 
13 23.1  9.1  0 
14 24.1  8.1  0 
15 29.1 10.1  0 
16 21.1 11.1  0 
17 22.1 12.1  4 

编辑:解决由于ZLK:

SELECT 
    julDay, tMax, tMin, 
    rain = case 
       when row_number() over (order by julDay) % 7 = 0 then 4 
       else 0 
      end 
FROM 
    tableName 
WHERE 
    .......; 
+1

像'雨=情况下ROW_NUMBER()OVER(由jday顺序)%7 = 0,那么其他设为myVal 0 end' – ZLK

+0

谢谢,工作完美!我认为它需要一个主键来使用row_number。你是否知道任何内置的SQL特性将Julian日值转换为当前日期?例如9会是09/01/yyyy?再次感谢 – Mat41

+0

也许['DATEFROMPARTS'](https://msdn.microsoft.com/en-us/library/hh213228.aspx)就像你正在寻找的东西。当前的年/月值可以来自'DATEPART(YEAR,GETDATE())'和'DATEPART(MONTH,GETDATE())'。 **编辑:**我刚刚意识到这是SQL 2008,在这种情况下,你需要手动完成。例如'CAST(DATEPART(YEAR,GETDATE())AS VARCHAR(4))+' - '+ CAST(DATEPART(MONTH,GETDATE())AS VARCHAR(2))+' - '+ CAST(JDAY AS VARCHAR ))' – ZLK

回答

1

使用ROW_NUMBER()MODULO (%),你可以指定一个值每x行。

例如

SELECT julDay, 
     tMax, 
     tMin, 
     rain = CASE WHEN ROW_NUMBER() OVER (ORDER BY julDay) % 7 = 0 THEN 4 ELSE 0 END 
FROM tableName;