用于在SQL Management Studio 2008中获取先前记录值的SQL查询

时间:2014-03-13 10:26:36

标签: sql sql-server-2005

我需要构建一个sql查询以满足以下要求

ID  |Number_flag|Active_flag_ind| Currency   |My Requirment
----|-----------|---------------|---------   -------------- 
100 | 1         |     Y         |   USD      USD-GBP
100 | 2         |     N         |   GBP      Null
201 | 1         |     N         |   AUD      AUD

此处的方案是,每个ID都有两条记录,并显示为number_flagActive_flag_ind.

(请参阅上面的示例)我的要求是,如果我有ID的两个记录。 N标志币应与Y标志币连接。如果我只有一个ID,则应填充相同的记录货币

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以使用窗口函数和一些逻辑来执行此操作。如果我有正确的逻辑,那就是:

  1. number_flag = 2时,值为NULL
  2. id只有一行时,它会有number_flag = 1,然后值为currency
  3. id有两行时,number_flag = 1的一行会连接这两种货币。
  4. 以下查询执行此操作:

    select t.id, t.number_flag, t.active_flag_ind, t.currency,
           (case when t.number_flag = 1 and
                      max(t.number_flag) over (partition by t.id) = 2
                 then t.currency + '-' + max(case when t.number_flag = 2 then t.currency end) over (partition by t.id)
                 when t.number_flag = 1
                 then t.currency
            end) as my_requirement
    from table t;
    

答案 1 :(得分:0)

这应该适合你:

SELECT t1.ID,
       t1.Number_flag,
       t1.Active_flag_ind,
       CASE WHEN t1.Active_flag_ind = 'Y' AND t2.Currency IS NOT NULL
            THEN t1.Currency + '-' + t2.Currency
            WHEN t1.Active_flag_ind = 'N' AND t3.Currency IS NOT NULL
            THEN NULL
            ELSE t1.Currency
        END AS Currency
  FROM your_table t1 LEFT OUTER JOIN
       your_table t2 ON t1.ID=t2.ID
                     AND t1.Active_flag_ind='Y'
                     AND t2.Active_flag_ind='N' LEFT OUTER JOIN
       your_table t3 ON t1.ID=t3.ID
                     AND t1.Active_flag_ind='N'
                     AND t3.Active_flag_ind='Y'