复杂的sql更新查询

时间:2014-09-04 14:31:15

标签: sql

我有像

这样的表格
Ticker Sedol  bbg    identifier
t1      w2    null     Ticker
t2      w3    null      sedol

如果identfier是自动收报机,那么bbg将使用自动收报机列值更新并与sedol标识符相同。但是如果我在标识符列中插入新的标识符,那么它也应该适用于该标识符列。 如果我插入' occ'在标识符列中,应使用occ列值更新bbg列。 我将在插入标识符值后添加occ列。

我想要输出......

Ticker Sedol  bbg    identifier
t1      w2    t1     Ticker
t2      w3    w3      sedol

注意:查询应该是动态的

1 个答案:

答案 0 :(得分:0)

我知道你要求动态,但这不会吗?

UPDATE TableName
SET    bbg = CASE
                WHEN identifier = 'Ticker'
                THEN Ticker
                WHEN identifier = 'Sedol'
                THEN Sedol
                WHEN identifier = 'occ'
                THEN occ
             END

动态版本:

DECLARE @SQL AS VARCHAR(MAX)
SET @SQL = 'UPDATE TableName
            SET    bbg = CASE ' +
            STUFF
            (
                (
                    SELECT ' ' + 'WHEN identifier = ''' + c.name + ''' THEN ' + QUOTENAME(c.name)
                    FROM   sys.columns c
                           JOIN sys.tables t 
                               ON c.object_id = t.object_id
                    WHERE t.name = 'YourTableName'
                          AND c.name <> 'bbg'
                    FOR XML PATH('')
                ), 
                1, 
                0, 
                ''
            ) + ' END'
EXEC (@SQL)

一个很好的 FIDDLER演示 来证明我的情况......