当1列为空时,使另一列等于某个数字错误

时间:2018-06-22 20:13:01

标签: sql sql-server case-when

此行出现错误

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

错误是:

  

'='附近的语法不正确

有人可以告诉我我在做什么错吗?

以下是相同的数据:

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

3 个答案:

答案 0 :(得分:0)

SQL Server不支持布尔类型。我不确定你打算做什么。也许:

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

答案 1 :(得分:0)

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

,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

答案 2 :(得分:0)

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

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
)
对于countofMk为空的组,

0将为[sm]

相关问题