SQL 视图 选择 可选

Posted

技术标签:

【中文标题】SQL 视图 选择 可选【英文标题】:SQL View Select Optional 【发布时间】:2020-07-08 18:09:09 【问题描述】:

我认为当前的输出是这样的

   Code Value GrpCode GrpDft
  --------------------------
   A,   1,    A1,     N
   B,   null, A1,     Y
   C,   1,    A2,     N
   D,   2,    A2,     Y
   E,   null, A3,     Y
   F,   null, A3,     N       

规则如下

    每个组只能有 2 个代码,并且总是有一个默认代码而不是一个默认代码。 如果默认代码不为空,则始终显示该行。不管非默认代码是否有价值 如果默认代码为空,则仅当它有值时才显示无默认代码值。 如果默认和非默认代码都为空,则显示默认值。

所以基于上面我应该有下面的行剩余。

   A, 1,    A1, N
   D, 2,    A2, Y
   E, null, A3, Y

不幸的是,由于其他因素,这必须作为视图而不是存储过程或函数来完成。

【问题讨论】:

您的问题是指所谓的“默认代码”。我在示例数据中看不到该名称的任何内容。 您提出了一些要求,但遗漏了一个问题。请阅读this,了解一些改进“问题”的技巧。 【参考方案1】:

如果我没听错的话,你可以用窗口函数来实现这个逻辑:

select * 
from (
    select 
        t.*,
        row_number() over(
            partition by grpCode
            order by 
                case
                    when grpDft = 'Y' and value is not null then 0
                    when grpDft = 'N' and value is not null then 1
                    else 2
                end,
                grpDft desc
        ) rn
    from mytable t
) t
where rn = 1

Demo on DB Fiddle

代码 |价值 | GrpCode | GrpDft | rn :--- | ----: | :-------- | :----- | :- 一个 | 1 | A1 | N | 1 D | 2 | A2 |是 | 1 E | | A3 |是 | 1

【讨论】:

以上是关于SQL 视图 选择 可选的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 中的函数需要在 Power BI 中具有可选参数

SQLAlchemy 选择在 SQLite 表上给出不同的结果,原始 sql 与可选

LINQ to SQL Where 子句可选条件

Oracle SQL - 从视图中选择比在视图中运行选择更多的行

sql中的视图怎么创建及使用呢!

使用 SQL 选择查询创建视图