Redash中如何将参数用作查询的列名?
在Redash中用参数作列名的解决方法
Redash默认不支持直接把参数当作列名(SQL标识符)使用,因为参数会被当作字符串值处理,但可以根据你的实际需求用两种方式实现:
1. 根据参数动态选择列的值(对应你原写法的场景)
你的CASE写法逻辑本身没问题,大概率是引号格式或参数匹配的问题。试试把SQL里的双引号改成单引号,同时给结果列添加别名:
SELECT CASE WHEN {{ Parameter }} = 'Label Column 1' THEN COLUMN_1 WHEN {{ Parameter }} = 'Label Column 2' THEN COLUMN_2 ELSE COLUMN_3 END AS selected_column FROM MY_TABLE WHERE ...;
另外要确保参数的下拉选项值和CASE语句里的字符串完全一致,包括大小写、空格,否则会出现匹配失败的情况。
2. 直接把参数作为列名返回
如果想让用户选择哪个列名就返回对应列,需要开启Redash的动态SQL功能:
- 在查询编辑页右上角点击「设置」,勾选「Allow Dynamic SQL」选项
- 然后用数据库对应的标识符引号包裹参数,比如MySQL用反引号:
SELECT `{{ Parameter }}` FROM MY_TABLE WHERE ...;
⚠️ 注意:动态SQL存在SQL注入风险,必须把参数设置为下拉选单,严格限制可选的列名,不能允许用户输入任意内容。不同数据库的标识符引号规则不同:PostgreSQL用双引号,SQL Server用方括号[],需要对应调整。
内容的提问来源于stack exchange,提问作者8oris
相关产品推荐
相关产品推荐

