我有一个类别表,在一列中我有一个数据表中的字段列表。
任务是查询数据表,我应该根据类别表中的字段列表定义显示字段。
类别表看起来像
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
感谢您的提示!
答案 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
我真诚地希望这是一个思想练习,而不是真人所使用的实际模式。