SQL Server能否用单个视图筛选仅出现一次的OUTPUT类型数据?
单个视图实现指定SQL筛选需求
原始表数据
假设表名为YourTable,现有数据如下:
ID Name Type ------------------- 1 ZZ INPUT 2 AA INPUT 3 CC OUTPUT 4 ZZ OUTPUT 5 AA INPUT 6 CC INPUT 7 KK OUTPUT 8 TT INPUT 9 CC OUTPUT 10 DD OUTPUT
需求
筛选出仅出现一次且Type为OUTPUT的Name对应的记录。
预期结果
ID Name Type ------------------- 7 KK OUTPUT 10 DD OUTPUT
实现方案:单个视图完成
完全可以用单个视图实现,不需要拆分两个视图。以下提供两种常用写法:
写法1:子查询统计Name出现次数
CREATE VIEW vw_OutputOnceRecords AS SELECT t.ID, t.Name, t.Type FROM YourTable t WHERE t.Type = 'OUTPUT' AND (SELECT COUNT(*) FROM YourTable WHERE Name = t.Name) = 1;
写法2:窗口函数(SQL Server 2008及以上版本支持)
CREATE VIEW vw_OutputOnceRecords AS SELECT ID, Name, Type FROM ( SELECT ID, Name, Type, COUNT(*) OVER (PARTITION BY Name) AS NameCount FROM YourTable WHERE Type = 'OUTPUT' ) AS sub WHERE NameCount = 1;
两种写法都能直接生成单个视图,精准筛选出仅出现一次且Type为OUTPUT的Name对应的记录。
内容的提问来源于stack exchange,提问作者mucho81
相关产品推荐
相关产品推荐

