【发布时间】:2018-08-08 17:24:44
【问题描述】:
看看下面的查询。如何将“操作”列显示为文本。 如果“Action”的结果是 LEQ 0,则显示文本“Crash”,如果“Action” GRT 0 是否显示文本“Hold”?
SELECT col1 AS Action
FROM vdk
WHERE t_stamp Between "{StartTime}" AND "{EndTime}"
【问题讨论】:
看看下面的查询。如何将“操作”列显示为文本。 如果“Action”的结果是 LEQ 0,则显示文本“Crash”,如果“Action” GRT 0 是否显示文本“Hold”?
SELECT col1 AS Action
FROM vdk
WHERE t_stamp Between "{StartTime}" AND "{EndTime}"
【问题讨论】:
重构上面的答案,因为我认为没有必要将查询添加到别名表。我认为这应该可以工作,另一个答案也应该可以工作,但它的查询有点复杂,没有给定的原因。
SELECT (CASE WHEN col1 <= 0 THEN 'Crash' ELSE 'Hold' END) AS Action
FROM vdk
WHERE t_stamp Between "{StartTime}" AND "{EndTime}"
【讨论】:
CASE WHEN ... 语句中使用Action(别名)。
使用CASE WHEN ... ELSE ... END 并选择从您的集合(查询):
SELECT *, (CASE WHEN Action <= 0 THEN 'Crash' ELSE 'Hold' END) as ActionText
FROM (
SELECT col1 AS Action
FROM vdk
WHERE t_stamp Between "{StartTime}" AND "{EndTime}"
) q
【讨论】:
这个应用程序类似于我的第一个问题,我认为它可能会帮助其他人。 用户可以从表格的下拉列表中选择一组选项来将值输入到数据库中。
使用 Ignition 的 Power Table 组件的扩展功能 configureEditor 和以下脚本。 此脚本设置下拉列表。
if colName == 'Action':
return {options': [(0, 'Null'), (1, 'HOLD'), (2, 'CRASH')]}
连同同一个 Power Table 的扩展函数 onCellEdited 脚本。 此脚本将选择作为值输入到数据库中。
#onCellEdited Upadte Query
row = rowIndex
col = colIndex
colName = colName
value = newValue
ndx = self.data.getValueAt(row,0)
query = "UPDATE vdk SET %s = ? WHERE ndx = ?" % colName
system.db.runPrepUpdate(query,[value,ndx],'history')
system.db.refresh(self.data)
【讨论】: