如何解决T-SQL 在不同行的不同列中的一列中查找值
这很难解释,所以我会尽力而为。
我有这个表(其他列存在但与我的查询无关)。
CREATE TABLE ClientRelationships
(
Client1 VARCHAR(10) NOT NULL,Client2 VARCHAR(10) NULL
)
INSERT INTO ClientRelationships (Client1,Client2)
VALUES ('C12345','C67890'),('C54353','C76345'),('C76345','C54353'),('C73246',NULL),('C67890','C12345')
Client1 | Client2 |
---|---|
C12345 | C67890 |
C54353 | C76345 |
C76345 | C54353 |
C73246 | NULL |
C67890 | C12345 |
从数据中可以看出,有些行中的 Client1 值出现在另一行中作为 Client2。在这些情况下,我希望将第一次出现标记为“主要”,将第二次出现标记为“次要”(其中 Client1 值位于不同行的 Client2 列中)。也许就像一个名为“Primary”的布尔列设置为 0 或 1。
如果 Client2 列中没有值 (NULL),则主列将设置为 1
如果使用我的示例数据,结果应该是这样的。
Client1 | Client2 | 主要 |
---|---|---|
C12345 | C67890 | 1 |
C54353 | C76345 | 1 |
C76345 | C54353 | 0 |
C73246 | NULL | 1 |
C67890 | C12345 | 0 |
希望这是有道理的。
我使用的是 SQL Server 2019,但可以满足 2012 及以上版本的需求,因为我拥有所有实例。
记录并不总是同时出现在表中。
我真的不确定如何解决这个问题,所以寻求一些建议。
解决方法
如果有定义行顺序的列,例如 ID
,那么您可以使用 CASE
表达式和 EXISTS
:
SELECT c1.*,CASE
WHEN EXISTS(SELECT 1 FROM ClientRelationships c2 WHERE c2.ID < c1.ID AND c2.Client2 = c1.Client1) THEN 0
ELSE 1
END [Primary]
FROM ClientRelationships c1
或者,使用相关子查询:
SELECT c1.*,(
SELECT COALESCE(MAX(0),1)
FROM ClientRelationships c2
WHERE c2.ID < c1.ID AND c2.Client2 = c1.Client1
) [Primary]
FROM ClientRelationships c1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。