2017-03-16 62 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;