[英]CASE statement with Subquery in SQL Server
请参阅我的 sql 查询。
select
CASE
WHEN (SELECT COUNT(COL1) FROM FACT_ACTIVITY group BY FACT_ACTIVITY.COL2)>1
THEN (SELECT COUNT(COL3) FROM FACT_ACTIVITY)
WHEN (SELECT COUNT(COL1) FROM FACT_ACTIVITY group BY FACT_ACTIVITY.COL2)=1
THEN (SELECT COUNT(COL4) FROM FACT_ACTTIVITY)
END
,EXTRACT(year from fa.INC_START_DATETIME) AS YearOFF
,COUNT(fa.COL2) AS OffCount from FACT_ACTIVITY fa INNER JOIN
DIM_OFF_TYPE do ON fa.OFF_TYPE_ID = do.OFF_TYPE_ID
WHERE fa.OFF_TYPE_ID IN (24001) and YEAR(fa.INC_START_DATETIME) IN (2016,2017)
group by do.OFF_TYPE_DESCR,YEAR(fa.INC_START_DATETIME)
WHEN 情况下的子查询给出了很多行,但我希望子查询检查每个 FACT_ACTIVITY_ID 并查看 count(col2) >1 并执行 THEN 语句。
对于为每个 FACT_ACTIVITY_ID 返回一行的子查询,您必须将该过滤器放在 WHERE 子句中:
SELECT
CASE
WHEN (SELECT COUNT(COL1)
FROM FACT_ACTIVITY fa2
WHERE fa2.FACT_ACTIVITY_ID = fa.FACT_ACTIVITY_ID
GROUP BY FACT_ACTIVITY.COL2) > 1
THEN (SELECT COUNT(COL3) FROM FACT_ACTIVITY)
WHEN (SELECT COUNT(COL1)
FROM FACT_ACTIVITY fa2 WHERE fa2.FACT_ACTIVITY_ID = fa.FACT_ACTIVITY_ID
GROUP BY FACT_ACTIVITY.COL2)=1
THEN (SELECT COUNT(COL4) FROM FACT_ACTTIVITY)
END AS GiveMeAnAlias
,EXTRACT(year from fa.INC_START_DATETIME) AS YearOFF
,COUNT(fa.COL2) AS OffCount
FROM FACT_ACTIVITY fa
INNER JOIN DIM_OFF_TYPE do ON fa.OFF_TYPE_ID = do.OFF_TYPE_ID
WHERE fa.OFF_TYPE_ID IN (24001)
AND YEAR(fa.INC_START_DATETIME) IN (2016,2017)
GROUP BY do.OFF_TYPE_DESCR,
YEAR(fa.INC_START_DATETIME)
请注意子查询中表 FACT_ACTIVITY "fa2" 的表别名,以区分子查询中的 FACT_ACTIVITY 与外部主查询中的 FACT_ACTIVITY。
还要注意具有良好的空白和制表符的可读性和可维护性:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.