我是一个新手 SQL 程序员,整个早上都在为此苦苦挣扎,所以请多多包涵。我的情况是这样的:我有一张 SKU 表,需要发送到我们的电子商务网站。这些 SKU 中的每一个都有一个“数量”、一个“活跃”值和一个“停产”值。当我们一次处理一个 SKU 时,这很容易处理,但现在我必须发送包含一个或多个 SKU 的套件。
例如,如果我的套件 ID 是 000920_001449_001718_999999(四个 SKU 的组合),我需要收集整个 SKU 集的数据,如下所示:
这是我需要合并的逻辑:
- 如果任何 SKU 的 IsActive 值为 null 或 WEBNO,则整个套件必须返回 WEBNO。否则,返回 WEBYES。
- 如果任何 SKU 的 IsDiscontinued 值为 null 或“1”,则整个套件必须返回 IsDiscontinued =“1”。否则,返回 0。
我的代码有点乱,但这是我到目前为止所管理的:
SELECT
CASE WHEN 'WEBNO' in
(
SELECT IsActive
FROM #SkusToSend as Sending
RIGHT JOIN
(
SELECT * FROM [eCommerce].[dbo].[Split] (
'000920_001449_001718_999999'
,'_')
) as SplitSkus
on Sending.SKU = SplitSkus.items
) THEN 'WEBNO'
ELSE 'WEBYES'
END
我的问题是:是否可以编写一个语句来解析我的示例表,只返回一行“IsActive”和“IsDiscontinued”?我尝试在这些字段上使用 GROUP BY 和 HAVING 语句,但总是返回多行。
我拥有的代码处理 WEBNO 值,但不是 NULL,甚至还没有开始考虑 IsDiscontinued 字段。有没有一种简洁的方法可以一起解析这个问题,或者有更好的方法来处理这类问题?