MSSQL 2008获得连接字段的结果

时间:2014-10-29 17:02:39

标签: sql sql-server sql-server-2008

我有一个类别表,在一列中我有一个数据表中的字段列表。

任务是查询数据表,我应该根据类别表中的字段列表定义显示字段。

类别表看起来像

CATEGID | FIELDLIST 1 |[Field1]+':'+[Field2]+':'+[Field3] 2 |[Field3]+':'+[Field1]

数据表看起来像

DATAID | CATEGID | FIELD1 | FIELD2 | FIELD3 1 | 1 |value1 | value21 | value32 2 | 1 |value12 | value20 | value31 3 | 2 |value15 | value2 | value35 4 | 2 |value10 | value25 | value3 5 | 1 |value19 | value20 | value36 6 | 2 |value17 | value2 | value36

结果我想要像这样的东西

DATAID | CATEGID | FIELD1 | FIELD2 | FIELD3 | CONCATENATED_RESULT 1 | 1 |value1 | value21 | value32 | value1:value21:value32 2 | 1 |value12 | value20 | value31 | value12:value20:value31 3 | 2 |value15 | value2 | value35 | value35:value15 4 | 2 |value10 | value25 | value3 | value3:value10 5 | 1 |value19 | value20 | value36 | value19:value20:value36 6 | 2 |value17 | value2 | value36 | value36:value17

感谢您的提示!

1 个答案:

答案 0 :(得分:2)

我甚至不确定创造性地使用sp_executesql可以拯救我们。理论上你可以构造一个带有FIELDLIST作为参数的sql字符串,但你如何加入它以使字段列表以及你的输出会改变?

奇怪的架构需要退化解决方案。输入REPLACE

select d.DATAID, d.CATEGID, d.FIELD1, d.FIELD2, d.FIELD3, 
       REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(c.FIELDLIST, 
           '[Field1]', d.FIELD1), 
           '[Field2]', d.FIELD2), 
           '[Field3]', d.FIELD3), 
           '+''', ''), '''+', '')
from DATA d
inner join CATEGORY c on c.CATEGID = d.CATEGID

我真诚地希望这是一个思想练习,而不是真人所使用的实际模式。