簡體   English   中英

您將如何使用SQL Server 2005做到這一點?

[英]How would you do this using SQL Server 2005?

假設我有一個具有以下結構的表table1

  id date v1   v2  v3  v4 ... vn
  ------------------------------
  1   03   Y    N  89  77 ... x
  1   04   N    N  9   7  ... i
  1   05   N    Y  6   90 ... j
  1   06   N    Y  9   34 ... i
  1   07   N    Y  0   88 ... i
  2   03   N    N  9   77 ... f
  2   04   Y    Y  90  7  ... y
  2   05   Y    N  6   90 ... v
  2   06   N    Y  9   34 ... i
  2   07   N    N  10  88 ... i

您可能會看到,該表的每個ID都有五行。 我想創建兩個新列:

-summarystory:=該變量是為日期在0507之間的那些行計算的,並且是最后三行的變量v3的總和。

讓我更好地解釋一下:前兩行( date 03和04)必須具有NULL值,但具有date=05的行是最后三個v3值的總和,即89+9+6=104 同樣,具有date=06的行必須等於9+6+9=24 必須針對每個ID和每個日期執行此操作。

這是期望的結果:

  id  date v3  summarystory
  -------------------------
  1    03  89     NULL
  1    04  9      NULL
  1    05  6      104
  1    06  9      24
  1    07  0      15
  2    03  9      NULL
  2    04  90     NULL
  2    05  6      105
  2    06  9      105
  2    07  10     25
  • VcountYN:=每行的Y數(僅基於變量v1v2 )。 所以。 例如,對於第一行,它將為VcountYN = 1。 必須為所有行計算此變量。

任何幫助深表感謝。

這是進行計算的方法。 練習將其變成新表:

-- SQL 2012 version
Select
  t.id,
  t.[date],
  Case When [Date] Between 5 And 7 Then 
    Sum(v3) over (
      partition by 
        id 
       order by 
         [date]
       rows between 
         2 preceding and current row
    ) Else Null End,
  Case When v1 = 'Y' Then 1 Else 0 End +
    Case When v2 = 'Y' Then 1 Else 0 End
From
  table1 t;

-- SQL 2005 version
Select
  t1.id,
  t1.[date],
  Case When t1.[date] Between 5 And 7 Then t1.v3 + IsNull(t2.v3, 0) + IsNull(t3.v3, 0) Else Null End,
  Case When t1.v1 = 'Y' Then 1 Else 0 End +
    Case When t1.v2 = 'Y' Then 1 Else 0 End
From
  table1 t1
    Left Outer Join
  table1 t2
    On t1.id = t2.id and t1.[date] = t2.[date] + 1
    Left Outer Join
  table1 t3
    On t2.id = t3.id and t2.[date] = t3.[date] + 1

http://sqlfiddle.com/#!6/a1c45/2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM