【问题标题】:Is it possible to limit the values of a SQL view?是否可以限制 SQL 视图的值?
【发布时间】:2019-09-24 03:13:34
【问题描述】:

我有一个包含多个值的视图。这个视图被直接调用到我的 ERP 中的下拉列表中。我想知道是否可以根据 ERP 中的另一个字段来限制此视图的值?

打开带有字段的表单的页面调用 3 个过程:before_open、before_close、after_save

我找不到这方面的任何信息。

我已经尝试使用 Where 子句来限制值,但它不起作用。

//我的看法

CREATE VIEW Values
AS
SELECT N_values = 1 , Value = 'Working'
UNION ALL
SELECT N_values = 2 , Value = 'Pause'
UNION ALL
SELECT N_values = 3 , Value = 'Home'
UNION ALL 
SELECT N_values = 4 , Value = 'Vacations'
GO

//为了限制我这样做的值,其中 ID 为 1,5,6

IF(field = 'Not at work') SELECT field FROM view WHERE N_values IN(3,4)

我希望下拉列表的输出只有 [N_values] 3 和 4,但我得到了所有列表。

【问题讨论】:

  • 您到底尝试了什么?这看起来很简单,WHERE 应该可以了。
  • 从视图中选择记录时可以直接使用WHERE条件。
  • 如果不提供某种方法将查询中返回的行链接到此“其他字段”,则无法实现您的目标。我怀疑您需要使用 ERP 中的代码来过滤内容。如何做到这一点需要您的 ERP 专业知识。
  • 为什么还要创建这个视图?为什么不将这些信息存储在表格中?
  • 什么是“字段”,请提供一个最小的完整可验证示例:stackoverflow.com/help/mcve

标签: sql sql-server view restriction


【解决方案1】:

您在寻找where 子句吗?

SELECT field
FROM view
WHERE (@field = 'Not at work' and N_values IN (3, 4)) OR
      (@field <> 'Not at work');

【讨论】:

  • 感谢您的回答。这不正是我正在寻找的,因为视图被直接调用到 ERP 中
【解决方案2】:

为什么不添加一个额外的(计算列)working

CREATE VIEW Values
AS
SELECT N_values = 1 , Value = 'Working'
UNION ALL
SELECT N_values = 2 , Value = 'Pause'
UNION ALL
SELECT N_values = 3 , Value = 'Home'
UNION ALL 
SELECT N_values = 4 , Value = 'Vacations'
GO


//this view add a 'calculated field' that is true if forking
CREATE VIEW values_extended AS
SELECT *, case when n_values >2 then 'not-working' else 'working' end
FROM values
GO

所以你可以选择

select n_values, Value
from value_extended
where working like 'not-working'

会给你

3, Home
4, Vacations

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 2015-03-25
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2010-11-09
    相关资源
    最近更新 更多