sql – 比较多个列,但只有那些具有有效值的列,如果all相等则创建
发布时间:2020-12-12 06:53:56 所属栏目:MsSql教程 来源:网络整理
导读:我想创建一个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
我想创建一个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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |