2016-04-24 8 views
0

親SKUを持つ入力テーブル、つまりBOO3とその子スキーマBOO3L,BOO3S,BOO3Mがあります。これはこれまでの私のコードで、私はここで立ち往生しています。必要条件に従ってSQL Serverで文字列を分割する

enter image description here

categoriesurl-key列が期待される結果のように変更しなければなりません。 url-key列は、小文字で、-で区切る必要があります。

私は、出力は次のようになりたい:あなたはこのために、SQL Serverの機能のカップルを必要とするよう

enter image description here

答えて

1

が見えます。データと

まずテストテーブルは、あなたが与えた:カテゴリについては

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をカットする必要があります、私がしなければなりませんでしたそれを見てください)。

URLは、タイトルケースを削除するにはLOWER()、スペースをハイフンに変更するにはREPLACE()が必要です。

最後に、「Small、Medium、Large」は、それが何であるかを確認するために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権利を取得します。

+0

よろしくお願いします。@Shaneis .. –

関連する問題