首页 > 解决方案 > 基于 1 个表中的 3 列的 case 语句

问题描述

我正在尝试在我的 sql 代码中创建一个字段,如果第 1 行和第 2 行中的 MRN 值相同并且相应的 TF_GROUP 相同但两行的 PathId 字段不同,那么新字段应该有一个“是”,否则它应该默认为“否”。我可以在 excel 中创建这个字段,但我正在努力在 sql 中创建类似的东西。我已经包含了我编写的 excel 语句,理想情况下我希望将其复制到下面的 sql 语句中。

=IF(AND(B2=B3,D2=D3,A2<>A3),"Yes","No")

我基本上想要一个类似于上面的 excel 函数的 sql 语法,我可以在 sql server 中使用它来创建我想要的列。

下面是我用 3 个字段(PathID、MRN、TF_GROUP)编写的 sql 代码。

 select DISTINCT 
[Pathway ID] PathID,
MRN,
DENSE_RANK() OVER(PARTITION BY mrn ORDER BY [Pathway ID]) RK,
[Treatment Function Group] TF_GROUP,
'' [Flag]

from [HRS_RTT].[dbo].[tbl_PMM_IncompletePTL_CG_Snapshot] 
where convert(date,censusdate) between '03-jun-19' and '09-jun-19'
AND MRN IS NOT NULL
AND [Treatment Function Group] IS NOT NULL

order by
MRN,
[Pathway ID]

这是运行嵌入式 sql 代码后的部分输出(见下面的链接)。名为“标志”的列是我在上面的 sql 代码中努力复制的内容。目前,我必须将输出复制到 excel 中,然后使用我之前在上一篇文章中包含的函数填充“标志”列。

在此处输入图像描述

标签: sqlsql-servertsql

解决方案


SELECT
    CASE
        WHEN B2 = B3 AND D2 = D3 AND A2 <> A3 THEN 'Y'
        ELSE 'N'
    END AS SomeColumnName
FROM SomeTable

资料来源: https ://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql?view=sql-server-2017


推荐阅读