【问题标题】:SQL Select row depending on values in different columnsSQL 根据不同列中的值选择行
【发布时间】:2021-08-27 10:14:57
【问题描述】:

我已经在这里找到了很多答案,但现在我似乎找不到任何针对我的具体问题的答案。

我不知道如何根据不同列中的值从一行中选择一个值

通过下表,我想达到以下结果。

如果stdvpuni = 1 列中的值,则从该行返回文章的值/内容(列艺术)。

如果stdvpuni = 0 列中的值,则返回本文中STDUNIABG = 1 所在行的值/内容(列艺术)。

【问题讨论】:

  • @keivanIpchi:这是一个 CASE 表达式,链接再次显示 w3fools 的质量差。

标签: sql row


【解决方案1】:

您似乎想要一个行部分art,基于其他行的内容。这建议使用row_number():

select t.*
from (select t.*,
             row_number() over (partition by art order by stdvpuni desc, STDUNIABG desc) as seqnum
      from t
     ) t
where seqnum = 1;

如果两列都不为1,您无需指定要执行的操作。您可能需要 where 子句 (where 1 in (stdvpuni, STDUNIABG)) 或 order by 中的其他条件。

【讨论】:

    【解决方案2】:

    我不知道什么是值/内容,但我想这对你来说很容易弄清楚。所以,我将重点介绍如何选择这个:

    SELECT
    CASE
        WHEN current.stdvpuni = 1 THEN 'values / contents of current row'
        ELSE 'values / contents of other row'
    END
    FROM yourtable current
    JOIN yourtable other
    ON other.stdvpuni = 1;
    

    【讨论】:

      【解决方案3】:

      WHERE 子句中将您的条件与NOT EXISTS 一起使用:

      SELECT t1.*
      FROM tablename t1 
      WHERE t1.STDVPUNI = 1 
         OR (
              t1.STDVPUNI = 0 AND t1.STDUNIABG = 1
              AND NOT EXISTS (SELECT 1 FROM tablename t2 WHERE t2.ART = t1.ART AND t2.STDVPUNI = 1)
            );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多