此行出现错误
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
答案 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]