当 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
)
countofMk
将 0
对于 [sm]
为空的组
我收到此行的错误
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
)
countofMk
将 0
对于 [sm]
为空的组