SQL Server 子查询或CTE,用于标识额外列中的混合面积

3qpi33ja  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(127)

我有下面的表,我正在寻找创建一个新的列,类型可以是“纯”或“混合”的基础上两个不同的条件。
| 身份证|单位|面积|n_单位|数量|
| - ------|- ------|- ------|- ------|- ------|
| 1245|小行星5485245| A类|第二章|1个|
| 1245|小行星2488754| B|第二章|1个|
| 小行星2358|小行星548754| A类|三个|1个|
| 小行星2358|小行星84447| A类|三个|1个|
| 小行星2358|小行星548754| A类|三个|1个|
| 小行星4582|小行星84447| C级|第二章|1个|
| 小行星4582|小行星548754| D级|第二章|1个|
| 小行星9696|小行星84447| B|第二章|1个|
| 小行星9696|小行星548754| K|第二章|1个|
我希望得到如下结果:
| 身份证|单位|面积|n_单位|数量|类型|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 1245|小行星5485245| A类|第二章|1个|溷合|
| 1245|小行星2488754| B|第二章|1个|溷合|
| 小行星2358|小行星548754| A类|三个|1个|纯的|
| 小行星2358|小行星84447| A类|三个|1个|纯的|
| 小行星2358|小行星548754| A类|三个|1个|纯的|
| 小行星4582|小行星84447| C级|第二章|1个|纯的|
| 小行星4582|小行星548754| D级|第二章|1个|纯的|
| 小行星9696|小行星84447| B|第二章|1个|溷合|
| 小行星9696|小行星548754| K|第二章|1个|溷合|
我的逻辑是这样的:
如果具有相同ID的所有行都是AreaA、C或D,则具有该ID的所有行都是类型“pure”。
否则,即如果在Id内存在不是A、C或D的字母,则具有相同Id的所有行都是类型“混合.”
n_units基于总单元,即具有相同ID的行数。
期待您的帮助。

hzbexzde

hzbexzde1#

它需要一个窗口函数和一个case表达式,如下所示:

SELECT *, MIN(CASE WHEN area IN ('A', 'C', 'D') 
                   THEN 'pure' 
                   ELSE 'mix' END) OVER(PARTITION BY id) AS type
FROM tab

如果输出中有“mix”,它将成为分配给分区的最小值,否则将得到“pure”。
检查here演示。

相关问题