微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

需要有条件的 Where 子句帮助 - SQL Server

如何解决需要有条件的 Where 子句帮助 - SQL Server

大家早上好,希望你能帮我解决我正在处理的问题。我不认为这将是一个有条件的 where 子句,但感觉就像这样。

我有一个保存屏幕认值的表格。该行可能是特定于州的,也可能适用于所有州。当行不是特定于状态时,stte_name 列加载了认值“XX”。

查询此表时,我将提供以下条件:

  • @screen_name
  • @ctl_name
  • @stte_name

我想检索满足所有三个条件的行以及满足@screen_name 和@ctl_name 条件的行,并且当状态不匹配时,stte_name 等于列认值“XX”。

如果我设置@stte_name = 'NY',我的结果应该是这样的:

screen_name ctl_name    stte_name   dflt_value
Screen 1    control 1   NY          Hello
Screen 1    control 2   XX          World
Screen 1    control 3   XX          !

如果我设置@stte_name = 'FL',我的结果应该是这样的:

screen_name ctl_name    stte_name   dflt_value
Screen 1    control 1   NY          Bonjour
Screen 1    control 2   XX          World
Screen 1    control 3   XX          !

我已经在这方面工作了一段时间,但无法操纵状态标准来产生所需的结果。我尝试过子查询、全外连接和许多其他角度。

任何帮助将不胜感激。

CREATE TABLE dbo.defaults_t
(
    screen_name VARCHAR(10),ctl_name    VARCHAR(10),stte_name   CHAR(2),dflt_value  VARCHAR(10),CONSTRAINT PK_defaults_t PRIMARY Key CLUSTERED
    (
        screen_name ASC,ctl_name    ASC,stte_name   ASC
    )
);

INSERT INTO defaults_t (screen_name,ctl_name,stte_name,dflt_value)
VALUES  ('Screen 1','control 1','NY','Hello'),('Screen 1','XX','Bonjour'),'control 2','World'),'control 3','!');


DECLARE @screen_name    VARCHAR(10),@ctl_name       VARCHAR(10),@stte_name      CHAR(2)

SELECT  @screen_name = 'Screen 1',@ctl_name    = 'control 1',@stte_name   = 'NY';
        
SELECT
    screen_name,dflt_value
FROM
    dbo.defaults_t
WHERE
        screen_name = @screen_name
    AND ctl_name    = @ctl_name
    AND stte_name   ?????;

解决方法

您可以为此使用 OUTER JOIN,但它确实表明默认值可能应该在单独的表中。无论如何,像这样:

SELECT
    t.screen_name,t.ctl_name,coalesce(t2.stte_name,t.stte_name) stte_name,coalesce(t2.dflt_value,t.dflt_value) dflt_value
FROM
    dbo.defaults_t t
LEFT JOIN DBO.defaults_t   t2
   on t.ctl_name = t2.ctl_name
   and t.screen_name = t2.screen_name
   and t2.stte_name = @stte_name 
WHERE t.stte_name   = 'XX';

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?