微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 比较多个列,但只有那些具有有效值的列,如果all相等则创建y / n标志

我想创建一个Y / N标志,其中Y表示给定行中每列中的每个有效值相等,否则为N.我需要排除任何包含空值,空格或全零的列.假设:
CREATE TABLE z_test
(ID INT NOT NULL,D1 VARCHAR(8)NULL,D2 VARCHAR(8)NULL,D3 VARCHAR(8)NULL,D4 VARCHAR(8)NULL,DFLAG CHAR(1)NULL)

INSERT INTO z_test VALUES (1,NULL,' ','000000','00000000',NULL)
INSERT INTO z_test VALUES (1,'20120101','0000',NULL)
INSERT INTO z_test VALUES (2,'20100101','20090101','0',NULL)
INSERT INTO z_test VALUES (3,NULL)

所需的输出(不包括D1到D4,但我不想丢弃它们)是:

ID       DFLAG
---------------
1        N
1        Y
2        Y
2        Y
3        N
3        Y

速度不是问题,因为这个查询不会经常运行,但它在一个较大的表上.

任何指针或建议将非常感谢!!

解决方法

SELECT ID,CASE 
         WHEN C = 1 THEN 'Y' 
         ELSE 'N' 
       END AS DFLAG 
FROM   z_test 
       CROSS APPLY (SELECT COUNT(disTINCT D) C 
                    FROM   (VALUES(D1),(D2),(D3),(D4)) V(D) 
                    WHERE  LEN(D) > 0 /*Excludes blanks and NULLs*/
                         AND D LIKE '%[^0]%'/*Excludes ones with only zero*/) CA

原文地址:https://www.jb51.cc/mssql/77590.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐