希望创建一个具有一个附加列的新行

时间:2014-01-22 14:42:00

标签: c# sql-server sql-server-2008

DB structure

我想从上面的表格 我们得到:

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行正常值。

2 个答案:

答案 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'