我正在尝试在我的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代码中复制名为“ Flag”的列。此刻,我必须将输出复制到excel中,然后使用以前在上一篇文章中包含的功能填充“标记”列。
答案 0 :(得分:4)
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
答案 1 :(得分:1)
案例表达将与Han给出的答案相同。如果您只有简单的IF / ELSE条件,也可以使用IIF。
SELECT IIF(B2 = B3 AND D2 = D3 AND A2 <> A3, 'Y', 'N') as SomeColumnName
From SomeTable
如果要测试的条件多种多样(IF THEN / IF THEN / IF THEN / ELSE),那么CASE比使用嵌套IIF更实用
答案 2 :(得分:1)
我正在尝试创建一个字段
您可以将计算列添加为
ALTER TABLE YourTableName
ADD NewColumnName AS CASE WHEN B2=B3 AND D2=D3 AND A2<>A3 THEN 'Y' ELSE 'N' END;
答案 3 :(得分:0)
其他答案都没有解决:这个问题是关于跨行比较。问题是如何在SQL中复制此Excel公式:
=IF(AND(B2=B3,D2=D3,A2<>A3),"Yes","No")
例如,请注意,B2
指的是第2行的B列,而B3
指的是第 3 行的B列。
这里是您所描述问题的解决方案。它使用T-SQL LEAD
函数在各行之间进行比较。请注意,由于您不清楚要执行的操作尚不清楚,因此我没有在原始查询中包含DISTINCT
条条件。
但是,我认为这不一定是您要执行的操作。在SQL中通常不做跨行比较。您可能需要进一步考虑自己的要求,看看是否可以提出一种更好的方法来满足要求。
select
PathID,
MRN,
TF_Group,
case
when MRN = Next_MRN and TF_Group = Next_TF_Group and PathID <> Next_PathID then 'Yes'
else 'No'
end as Flag
from (
select
[Pathway Id] as PathID,
MRN,
[Treatment Function Group] as TF_Group,
lead([Pathway Id]) over (order by MRN, [Pathway ID]) as Next_PathID,
lead(MRN) over (order by MRN, [Pathway ID]) as Next_MRN,
lead([Treatment Function Group]) over (order by MRN, [Pathway ID]) as Next_TF_Group
from tbl_PMM_IncompletePTL_CG_Snapshot
) x
order by MRN, PathID
请注意,此答案本质上是我在问题上发布的被标记为重复的答案的重复。我将其移到这里是为了防止丢失,这样任何发现此问题的人都会得到此答案。