SQL Select 行取决于不同列中的值
SQL Select row depending on values in different columns
我已经在这里找到了很多答案,但现在我似乎找不到任何适合我的具体问题的答案。
我不知道如何根据不同列中的值select行中的值
通过下面的table,我想达到以下结果。
如果 stdvpuni = 1
列中的值,则 return 文章(专栏艺术)这一行的值/内容。
如果 stdvpuni = 0
列中的值,则 return 值/内容来自 STDUNIABG = 1
行中的本文(专栏艺术)。
我不知道值/内容是什么,但我想这对您来说很容易理解。因此,我将重点介绍 select 的方法:
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;
根据其他行的内容,您似乎想要一行部分 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
.
中的其他条件
在 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)
);
我已经在这里找到了很多答案,但现在我似乎找不到任何适合我的具体问题的答案。
我不知道如何根据不同列中的值select行中的值
通过下面的table,我想达到以下结果。
如果 stdvpuni = 1
列中的值,则 return 文章(专栏艺术)这一行的值/内容。
如果 stdvpuni = 0
列中的值,则 return 值/内容来自 STDUNIABG = 1
行中的本文(专栏艺术)。
我不知道值/内容是什么,但我想这对您来说很容易理解。因此,我将重点介绍 select 的方法:
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;
根据其他行的内容,您似乎想要一行部分 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
.
在 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)
);