从 CTE 中的 select 语句中的 case 中获取值的 Sql 查询

时间:2021-07-13 08:59:46

标签: mysql sql

我正在尝试编写 SQL。在此,我希望输出中的列 Bank 和 Y-Bank。 Y-Bank 是根据某些 case 语句计算的,使用 CTE,但我无法将 Y-Plant 作为列返回。

This is the sample input and output

我还创建了一个表,如此处的输入/输出所示:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=749e4ca1570880e9c64c4553d18dea1a

代码如下:

WITH CTE AS
(
SELECT
"BANK",
(select 
case 
when "TEST"=0 AND "TEST1">0
THEN ( SELECT COUNT("ZONES")FROM mytable I WHERE  I.BANK = O.BANK AND I."ZONES"='Y' )
END AS "Y-BANK"
from(
  
 (SELECT  
         
          CASE WHEN ( (SELECT COUNT("ZONES")FROM mytable I WHERE I.BINDER = O.BINDER AND I."ZONES"='N' ) = 0 ) AND ( (SELECT COUNT("ZONES")FROM mytable I WHERE I.BINDER = O.BINDER AND I."ZONES"='Y' ) > 0 )
    THEN ( SELECT COUNT("ZONES")FROM mytable I WHERE  I."TOTAL LINE"= O."TOTAL LINE"AND I."ZONES"='N' )
  END AS "TEST",
          CASE WHEN ( (SELECT COUNT("ZONES")FROM mytable I WHERE I.BINDER = O.BINDER AND I."ZONES"='' ) = 0 ) AND ( (SELECT COUNT("ZONES")FROM mytable I WHERE I.BINDER = O.BINDER AND I."ZONES"='Y' ) > 0 )
       THEN ( SELECT COUNT("ZONES")FROM mytable I WHERE  I."TOTAL LINE" = O."TOTAL LINE" AND I."ZONES"='Y' )
  END AS "TEST1"
  from mytable )
  )
  )
FROM mytable O
)
 


SELECT *
FROM CTE O

有人能帮我纠正一下吗?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您想计算每个银行的“Y”值的数量。您可以使用窗口函数:

select t1.*, sum(zones = 'Y') over (partition by Bank1) as y_bank
from t1

Here 是一个 db<>fiddle。

答案 1 :(得分:0)

您可以使用以下查询

select 
   bank1 as "bank",
   (select count(*)over(partition by Bank1,Zones order by Bank1 desc) as "y_bank" from t1 where Zones = 'Y' and Bank1 = t.Bank1 limit 1) as "y_bank"
from t1 t
相关问题