我需要构建一个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_flag
和Active_flag_ind.
(请参阅上面的示例)我的要求是,如果我有ID
的两个记录。 N
标志币应与Y
标志币连接。如果我只有一个ID,则应填充相同的记录货币
提前致谢
答案 0 :(得分:0)
您可以使用窗口函数和一些逻辑来执行此操作。如果我有正确的逻辑,那就是:
number_flag = 2
时,值为NULL
。id
只有一行时,它会有number_flag = 1
,然后值为currency
。id
有两行时,number_flag = 1
的一行会连接这两种货币。以下查询执行此操作:
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'