使用大小写分隔符并选择具有特定值的行

问题描述 投票:0回答:1

我有一种情况,在这种情况下,我必须使用一个条件条件,在该条件下,如果值匹配,则需要从表中获取值,否则需要将其硬编码为1和0。

表结构:许可证

------------------------------------
Number   permit   reviewpermit   State
101       0        1              TX
101       1        0              OK
101       1        1              NC
102       1        1              LA
102       0        1              OK

条件:

  1. [如果“号码”组的状态为“ TX”,则从该“号码”组的所有其他状态的TX状态中选择“许可”,“复审许可”值。
  2. 如果“数字”组是其他状态,则为该“数字”组的所有状态选择“ 1”作为“许可”,选择“ 0”作为“复查许可”。

输出1

Number   permit   reviewpermit   State
101       0        1              TX
101       0        1              OK
101       0        1              NC
102       1        0              LA     
102       1        0              OK

101组具有所有得克萨斯州的许可和审查许可值102组的所有许可和复查许可值分别为“ 1”和“ 0”。

我到目前为止编写的代码。

 select Number,
      MAX(CASE WHEN State = 'TX'  THEN Permit ELSE 1 END) OVER (PARTITION BY [Number])as permit, 
      MAX(CASE WHEN State = 'TX' THEN ReviewPermit ELSE 0 END) OVER (PARTITION BY [Number]) AS reviewpermit, state
from License

但是它没有给我想要的输出。

sql sql-server ssms partition-by
1个回答
0
投票

我认为此逻辑可以满足您的要求:

select Number,
       coalesce(MAX(CASE WHEN State = 'TX'  THEN Permit END) OVER (PARTITION BY [Number]),
                1) as permit, 
       coalesce(MAX(CASE WHEN State = 'TX' THEN ReviewPermit END) OVER (PARTITION BY [Number]),
                0) AS reviewpermit, state
from License;

此检查MAX()中的“德州”。如果不存在,则值为NULL,因此COALESCE()会采用默认值。

© www.soinside.com 2019 - 2024. All rights reserved.