Excel 2013非VBA:基于其他单元格值格式化查询驱动列
解决查询驱动列的条件格式化问题
我懂你的需求——要让这个查询生成的Rotation列在@rotationsNum等于1时统一显示「N/A」,但其他情况下必须保留正常计算的数值(包括那些需要保留的0值)。其实不用大改现有逻辑,只需要在SELECT语句里给Rotation列加个条件判断就能搞定。
修改后的完整查询语句
DECLARE @rotationsNum INT SET @rotationsNum = ? SELECT t.Piece_ID, t.Linear_Location, CASE WHEN @rotationsNum = 1 THEN 'N/A' ELSE CAST( ((ROW_NUMBER() OVER(ORDER BY Linear_Location) -1 )%@rotationsNum )*(360/@rotationsNum) AS VARCHAR(10) ) END AS Rotation FROM ( SELECT Position.Feature_Key, Piece_ID, ((Place-1)%(Places/@rotationsNum))+1 AS Linear_Location, Place, Measured_Value, Places FROM Fake.dbo.Position LEFT JOIN Fake.dbo.Features ON Position.Feature_Key = Features.Feature_Key WHERE Position.Inspection_Key_FK = (SELECT Inspection_Key FROM Fake.dbo.Inspection WHERE Op_Key = ?) ) AS t ORDER BY Piece_ID, Linear_Location
关键逻辑说明
- 用
CASE分支做精准判断:当@rotationsNum等于1时,直接返回字符串「N/A」,完全替代原本的0值; - 当参数为2、3、4时,保留你原来的数学运算逻辑,同时用
CAST把数值转成字符串类型(保证整列输出类型统一,避免混合数值和字符串导致的异常); - 这种方式完美避开了单纯隐藏零值的问题——其他参数下正常生成的0值会被保留,不会被误替换。
内容的提问来源于stack exchange,提问作者Paniom
相关产品推荐
相关产品推荐

