这是输入表,其中包含父sku,即BOO3
及其子skus BOO3L,BOO3S,BOO3M
。到目前为止,这是我的代码,我被困在这里。
categories
和url-key
列应该像预期结果一样进行更改。 url-key
列应为小写,以-
分隔。
我希望输出看起来像这样:
答案 0 :(得分:1)
看起来你需要一些SQL Server功能。
首先是一个包含您提供的数据的测试表:
CREATE TABLE [TestTable]
([sku] VARCHAR(10), [product_type] VARCHAR(50), [categories] VARCHAR(100),
[name] VARCHAR(255), [url_key] VARCHAR(255));
INSERT INTO [TestTable]
VALUES
('B003', 'configurable', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL),
('B003L', 'simple', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL),
('B003M', 'simple', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL),
('B003S', 'simple', 'Men''s PJs → Comical Boxers', 'Wanna Moose Around Comical Boxer', NULL);
SELECT * FROM [TestTable];
对于类别,您需要CHARINDEX()或PATINDEX()来删除'→' ( alt + 26显然,我必须查找)。
网址需要LOWER()才能删除标题大小写,而REPLACE()则需要将空格更改为连字符。
最后,您的小,中,大'需要混合RIGHT()来检查它是什么,并CASE添加相关后缀。
SELECT
[sku]
, [categories] = SUBSTRING([categories], CHARINDEX('→', [categories]) + 1, 1000)
, [name]
, [url-key] = CASE
WHEN RIGHT([sku], 1) = 'L' THEN REPLACE(LOWER([name]), ' ', '-') + '-large'
WHEN RIGHT([sku], 1) = 'M' THEN REPLACE(LOWER([name]), ' ', '-') + '-medium'
WHEN RIGHT([sku], 1) = 'S' THEN REPLACE(LOWER([name]), ' ', '-') + '-small'
ELSE REPLACE(LOWER([name]), ' ', '-')
END
FROM [TestTable]
ORDER BY (CASE
WHEN RIGHT([sku], 1) = 'L' THEN 4
WHEN RIGHT([sku], 1) = 'M' THEN 3
WHEN RIGHT([sku], 1) = 'S' THEN 2
ELSE 1
END) DESC
DROP TABLE [TestTable];
最后另一个CASE语句让ORDER BY
正确,因为据我所知,没有自然的方法可以按照你想要的方式订购。