计算 SQL 服务器中各列的出现次数
Count occurrences across columns in SQL Server
我想根据多个列中出现的值更新一个列。
SQL Server 2017 架构设置:
CREATE TABLE Table1 (Part varchar(10),Jan int,Feb int,Mar int,Apr int,Occurrences int)
INSERT INTO Table1 (Part,Jan,Feb,Mar,Apr,Occurrences)VALUES('AAA',null,2,null,1,null),
('BBB',2,3,5,7,null),
('CCC',3,null,null,null,null),
('DDD',4,7,1,null,null)
我想根据 Jan、Feb、Mar、Apr 列中的现有值更新 Occurrences 列。它应该跳过 null 出现并仅在值存在时才计数。
对于上述架构,出现次数列应更新为
我怎样才能做到这一点?
试试这个:
Update Table1 set
Occurrences = ISNUMERIC(jan) + ISNUMERIC(feb) + ISNUMERIC(mar) + ISNUMERIC(apr)
最大限度地利用 iif()
功能。
update table1 set Occurrences = iif(coalesce(Jan, 0) != 0, 1, 0)
+ iif(coalesce(Feb, 0) != 0, 1, 0)
+ iif(coalesce(Mar, 0) != 0, 1, 0)
+ iif(coalesce(Apr, 0) != 0, 1, 0);
参见 dbfiddle。
您可以使用 unpivot
来做到这一点,但另外您需要传递您拥有的列数(4 - ...
在查询中):
SELECT Part, 4 - COUNT(*) FROM (
SELECT *
FROM @Table1
UNPIVOT (MonthVal FOR [Month] IN (Jan, Feb, Mar, Apr)) AS unpvt
) a GROUP BY Part
我想根据多个列中出现的值更新一个列。
SQL Server 2017 架构设置:
CREATE TABLE Table1 (Part varchar(10),Jan int,Feb int,Mar int,Apr int,Occurrences int)
INSERT INTO Table1 (Part,Jan,Feb,Mar,Apr,Occurrences)VALUES('AAA',null,2,null,1,null),
('BBB',2,3,5,7,null),
('CCC',3,null,null,null,null),
('DDD',4,7,1,null,null)
我想根据 Jan、Feb、Mar、Apr 列中的现有值更新 Occurrences 列。它应该跳过 null 出现并仅在值存在时才计数。
对于上述架构,出现次数列应更新为
我怎样才能做到这一点?
试试这个:
Update Table1 set
Occurrences = ISNUMERIC(jan) + ISNUMERIC(feb) + ISNUMERIC(mar) + ISNUMERIC(apr)
最大限度地利用 iif()
功能。
update table1 set Occurrences = iif(coalesce(Jan, 0) != 0, 1, 0)
+ iif(coalesce(Feb, 0) != 0, 1, 0)
+ iif(coalesce(Mar, 0) != 0, 1, 0)
+ iif(coalesce(Apr, 0) != 0, 1, 0);
参见 dbfiddle。
您可以使用 unpivot
来做到这一点,但另外您需要传递您拥有的列数(4 - ...
在查询中):
SELECT Part, 4 - COUNT(*) FROM (
SELECT *
FROM @Table1
UNPIVOT (MonthVal FOR [Month] IN (Jan, Feb, Mar, Apr)) AS unpvt
) a GROUP BY Part