有条件地连续计数项目

sho*_*ton 1 sql sql-server

要计算符合条件列表的行中的项目数,并将结果放置在该行的errorcnt列中。实际数据有15个条件和一百列。我认为此示例应说明我的追求。

CREATE TABLE #MyList
(
    Item1   NVARCHAR(100),
    Item2   NVARCHAR(100),
    date1   DATE,
    Date2   date,
    errorcnt int
)

INSERT INTO #MyList
  (
    Item1,
    Item2,
    Date1,
    Date2
  )
VALUES
('Dog','Puppy',   '2020-01-01', '2030-01-01'),
('Cat', 'Kitten', '2020-02-02', '2020-03-03')
Run Code Online (Sandbox Code Playgroud)

要计数的样本条件:

When Item1 <> Dog, OR 
when Item2 <> puppy, OR 
when Date2>date1
Run Code Online (Sandbox Code Playgroud)

每个记录都应计算在内,因此在记录2中,

Item1 <> Dog = 1
Item2 <> puppy = 1
Date 2 > Date 1 = 1
Total 3 errors.
Run Code Online (Sandbox Code Playgroud)

第2行的输出为:

Cat, Kitten, 2020-02-02, 2020-03-03, 3
Run Code Online (Sandbox Code Playgroud)

新手,不知道如何做到最好。

Gor*_*off 6

使用case表达式:

select ml.*,
       ( (case when Item1 <> 'Dog' then 1 else 0 end) + 
         (case when when Item2 <> 'puppy' then 1 else 0 end) +
         (case when Date2 > date1 then 1 else 0 end)
       ) as total_errors
from #mylist ml;
Run Code Online (Sandbox Code Playgroud)