我想从上面的表格 我们得到:
19 | 6E-SF-TYPE | Fixed | 0 | ServiceFee | 1
19 | 6ES-SF-TYPE | Fixed | 100 | ServiceFee | 1
19 | 9H-SF-TYPE | Fixed | 0 | ServiceFee | 1
我希望我很清楚我正在添加该类型的值。 我无法改变我的数据库结构。
希望创建一个包含一个附加列的新行。我希望第2行的preferenceValue成为新行中的第4个值。否则我想要第1行正常值。
答案 0 :(得分:1)
See the result in this fiddle这应该做。您只需使用值和类型的前缀将表连接到自身,这些前缀在删除-TYPE和-VALUE后缀后是相同的。在查询中,t
代表类型,v
代表值
Select
t.memberid,
t.preferencekey,
v.preferencevalue,
t.category,
t.itemtypeid
from @t t
JOIN
(
Select * From @t t
Where CHARINDEX('-VALUE', t.preferencekey) > 0
) v
ON REPLACE(t.preferencekey,'-TYPE','') = REPLACE(v.preferencekey,'-VALUE','')
Where CHARINDEX('-TYPE', t.preferencekey) > 0
19 6E-SF-TYPE 0 Service Fee 1
19 6ES-SF-TYPE 100 Service Fee 1
19 9H-SF-TYPE 0 Service Fee 1
答案 1 :(得分:0)
SELECT t1.memberid, t1.preferencekey,
t1.preferencevalue, t2.preferenceValue,
t1.category, t1.itemTypeId
FROM tablename t1
JOIN tablename t2 on t1.memberid = t2.memberid
AND t2.preferenceKey = replace(t1.preferenceKey, 'TYPE', 'VALUE')
WHERE t1.preferenceKey like '%TYPE'