当 1 列为 null 时使其他列等于某个数字错误

When 1 column is null make other column equal to a certain number error

我收到此行的错误

case 
   when [sm] is null 
      then countofMk = 0 
   else countofmake 
end as max2 

错误是:

Incorrect syntax near '='

谁能告诉我这里做错了什么?

这是相同的数据:

CREATE TABLE Table1
(
     sku varchar(50), 
     [gtitle] varchar(50), 
     [mk] varchar(50),  
     [md] varchar(50),
     [sm] varchar(50)
);

INSERT INTO Table1 (sku, [gtitle], [mk],[md],[sm])
VALUES ('F92', 'Game1', 'b100', 'xbox', 'pilot'),
        ('F92', 'Game1', 'b100', 'xbox', 'ex'),
        ('F92', 'Game2', 'b100', 'xbox', 'null'),
        ('F92', 'Game2', 'b100', 'xbox', 'LLL');

------- query       
WITH mixmax AS
(
    SELECT 
        sku, [gtitle], [mk], [md], [sm],
        COUNT([mk]) AS countofMk
    FROM 
        Table1
    GROUP BY  
        sku, mk, md, sm, gtitle
)
SELECT 
    *,
    CASE 
       WHEN [sm] IS NULL 
          THEN countofMk = 0 
       ELSE countofmake 
    END AS  max2,  --- getting error here
    ROW_NUMBER() OVER (PARTITION BY sku ORDER BY sku, countofMk DESC, COALESCE([md], ''), COALESCE([sm], '') ASC) AS RowNum
FROM 
    mixmax;

这是预期的结果:当一列为空时,使另一列为 0

        sku gtitle  mk  md  sm  countofMk   max2    RowNum
        F92 Game1   b100    xbox    ex  1   1   1
        F92 Game2   b100    xbox    LLL 1   1   2
        F92 Game2   b100    xbox    null    1   0   3
        F92 Game1   b100    xbox    pilot   1   1   4

SQL 服务器不支持布尔类型。我不确定你的意图。也许:

(case when [sm] is null then 0 else countofmake end) as max2,  --- getting error here

不能在同一行设置两列的值。你需要做两次,每列一次...

,max2 = case when [sm] is null then countofMk else countofmake end

或者也许

,max2 = case when [sm] is null then 0 else countofmake end

或者设置两列

,countofMk = case when [sm] is null then 0 end
,case when [sm] is null then 0 else countofmake end as max2 

编辑

countofMk = case when [sm] is null then 0 else countofmake end

您可以在原始查询中包含条件

WITH mixmax AS 
(
    SELECT sku
        , [gtitle]
        , [mk]
        , [md]
        , [sm]
        , COUNT(CASE WHEN [sm] IS NULL THEN NULL ELSE [mk] END) as countofMk
    FROM Table1
    GROUP BY sku, mk ,md, sm, gtitle
)

countofMk0 对于 [sm] 为空的组