我有一段代码可以在各种数据库上运行。它只是运行一个可配置的SQL查询,它返回许多行。从每一行,我拉一些文本和一个数字来创建一个新对象。我们最新的客户决定将所有文本编号组合放在数据库的一行中,即
text_1, num_1, text_2, num_2, text_3, num_3
我是否有一种聪明的方法可以查询此内容
text_1,num_1
text_2,num_2
text_3,num_3
这样我就不必重新编写此客户端的部分。
编辑: (不同的数据库意味着不同的RDBMS) (逗号分隔表中的不同列)
答案 0 :(得分:5)
SELECT
CASE row.id WHEN 1 THEN field1
WHEN 2 THEN field3
ELSE field5
END AS new_field_1,
CASE row.id WHEN 1 THEN field2
WHEN 2 THEN field4
ELSE field6
END AS new_field_2
FROM
myTable
CROSS JOIN
(SELECT 1 AS id UNION ALL SELECT 2 UNION ALL SELECT 3) AS row
这应该适用于大多数人,但仍需要稍加修改(例如在UNIONs for Oracle中添加'FROM dual'...)
或者,只需UNION三个查询......
SELECT field1, field2 FROM myTable
UNION ALL
SELECT field3, field4 FROM myTable
UNION ALL
SELECT field5, field6 FROM myTable
答案 1 :(得分:1)
您可以创建一个函数/ SP,以您需要的方式返回ResultSet。