Home Forums SQL Server 2008 T-SQL (SS2K8) How can I cut certain values in a strig to separate columns RE: How can I cut certain values in a strig to separate columns

  • I tried making a cursor, but it gave the same results, so I obviously did something wrong here.

    What's new in this question is that I have included all the possible languages.

    Below is the cursor I tried to make:

    /*

    IF OBJECT_ID('[#SALETYPE]','U') IS NOT NULL

    DROP TABLE [#SALETYPE]

    CREATE TABLE [#SALETYPE](

    [SaleType_Id] [int] NOT NULL,

    [name] [nvarchar](239) NOT NULL,

    [tooltip] [nvarchar](254) NULL,

    [saleTypeCat_id] [int] NOT NULL,

    )

    GO

    INSERT INTO [#SALETYPE]

    (

    SaleType_Id

    ,name

    ,tooltip

    ,saleTypeCat_id

    )

    SELECT 5, 'US:"Project/Prescription sale";NL:"Project/specificatie";SW:"Objektsförsäljning";FI:"Projekti/suunnittelijamyynti";FR:"Projet / Vente par prescription";SP:"Proyecto /Prescripción";IT:"Vendita progetto/prescrizione"' ,'US:"Project/Prescription sale";NL:"Project/specificatie";SW:"Objektsförsäljning";FI:"Projekti/suunnittelijamyynti";FR:"Projet / Vente par prescription";SP:"Proyecto /Prescripción";IT:"Vendita progetto/prescrizione"' ,1 UNION ALL

    SELECT 6, 'US:"Direct sale roofer";NL:"Directe verkoop dakdekkers";SW:"Direktförsäljning till TE";FI:"Suoramyynti kattourakoitsijoille";FR:"Ventes directes";SP:"Venta directa al instalador";IT:"Vendita diretta impermeabilizzatori"' ,'US:"Direct sale roofer";NL:"Directe verkoop dakdekkers";SW:"Direktförsäljning till TE";FI:"Suoramyynti kattourakoitsijoille"' ,0 UNION ALL

    SELECT 7, 'US:"Service & Maintenance sale";FI:"Huoltomyynti";FR:"Ventes de services";SP:"Venta de servicio";IT:"Vendita di servizi"' ,'US:"Service & Maintenance sale";FI:"Huoltomyynti";FR:"Ventes de services";SP:"Venta de servicio";IT:"Vendita di servizi"' ,0 UNION ALL

    SELECT 8, 'US:"Sales to distributor";FR:"Ventes distribution";SP:"Venta distribución";IT:"Vendite distribuzione"' ,'U' ,0

    */

    /*

    CREATE TABLE [#SaleBiz](

    [SaleType_id] [int] NOT NULL,

    [US] [nvarchar](200) NULL,

    [SW] [nvarchar](200) NULL,

    [SP] [nvarchar](200) NULL,

    [NL] [nvarchar](200) NULL,

    [PL] [nvarchar](200) NULL,

    [IT] [nvarchar](200) NULL,

    [FR] [nvarchar](200) NULL,

    [FI] [nvarchar](200) NULL,

    [NO] [nvarchar](200) NULL,

    [DA] [nvarchar](200) NULL,

    [GE] [nvarchar](200) NULL,

    [CZ] [nvarchar](200) NULL,

    [CN] [nvarchar](200) NULL,

    [RU] [nvarchar](200) NULL,

    [JP] [nvarchar](200) NULL

    ) ON [PRIMARY]

    GO

    */

    SET NOCOUNT ON

    DECLARE @SaleType_id int

    DECLARE @Country NVARCHAR(200)

    DECLARE @name NVARCHAR (200)

    DECLARE @US NVARCHAR(200)

    DECLARE @SW NVARCHAR(200)

    DECLARE @sp-2 NVARCHAR(200)

    DECLARE @NL NVARCHAR(200)

    DECLARE @PL NVARCHAR(200)

    DECLARE @IT NVARCHAR(200)

    DECLARE @FR NVARCHAR(200)

    DECLARE @FI NVARCHAR(200)

    DECLARE @NO NVARCHAR(200)

    DECLARE @DA NVARCHAR(200)

    DECLARE @GE NVARCHAR(200)

    DECLARE @CZ NVARCHAR(200)

    DECLARE @CN NVARCHAR(200)

    DECLARE @RU NVARCHAR(200)

    DECLARE @jp-2 NVARCHAR(200)

    DECLARE SaleType_cursor CURSOR FOR

    WITH Names AS

    (

    SELECT saletype_Id,

    LEFT( Item, 2) AS Country,

    SUBSTRING( Item, 5, LEN(Item) - 5) AS name

    FROM #saletype

    CROSS APPLY dbo.DelimitedSplit8K( name, ';') s

    WHERE LEN(Item) > 5

    )

    SELECT --'saletype' AS List

    n.saletype_id

    , US= CASE WHEN n.country='US' THEN name ELSE '' END

    , SW= CASE WHEN n.country='SW' THEN name ELSE '' END

    , SP= CASE WHEN n.country='SP' THEN name ELSE '' END

    , NL= CASE WHEN n.country='NL' THEN name ELSE '' END

    , PL= CASE WHEN n.country='PL' THEN name ELSE '' END

    , IT= CASE WHEN n.country='IT' THEN name ELSE '' END

    , FR= CASE WHEN n.country='FR' THEN name ELSE '' END

    , FI= CASE WHEN n.country='FI' THEN name ELSE '' END

    , NO= CASE WHEN n.country='NO' THEN name ELSE '' END

    , DA= CASE WHEN n.country='DA' THEN name ELSE '' END

    , GE= CASE WHEN n.country='GE' THEN name ELSE '' END

    , CZ= CASE WHEN n.country='CZ' THEN name ELSE '' END

    , CZ= CASE WHEN n.country='CZ' THEN name ELSE '' END

    , RU= CASE WHEN n.country='RU' THEN name ELSE '' END

    , JP= CASE WHEN n.country='JP' THEN name ELSE '' END

    FROM Names n

    ORDER BY n.saletype_id

    OPEN SaleType_cursor

    FETCH NEXT FROM SaleType_cursor

    INTO

    @SaleType_id

    ,@US

    ,@SW

    ,@SP

    ,@NL

    ,@PL

    ,@IT

    ,@FR

    ,@FI

    ,@NO

    ,@DA

    ,@GE

    ,@CZ

    ,@CN

    ,@RU

    ,@JP

    WHILE @@FETCH_STATUS=0

    BEGIN

    INSERT INTO [#SaleBiz]

    (

    [SaleType_id],

    [US],

    [SW],

    [SP],

    [NL],

    [PL],

    [IT],

    [FR],

    [FI],

    [NO],

    [DA],

    [GE],

    [CZ],

    [CN],

    [RU],

    [JP]

    )

    VALUES

    (

    @SaleType_id

    ,@US

    ,@SW

    ,@SP

    ,@NL

    ,@PL

    ,@IT

    ,@FR

    ,@FI

    ,@NO

    ,@DA

    ,@GE

    ,@CZ

    ,@CN

    ,@RU

    ,@JP

    )

    FETCH NEXT FROM SaleType_cursor

    INTO

    @SaleType_id

    ,@US

    ,@SW

    ,@SP

    ,@NL

    ,@PL

    ,@IT

    ,@FR

    ,@FI

    ,@NO

    ,@DA

    ,@GE

    ,@CZ

    ,@CN

    ,@RU

    ,@JP

    END

    CLOSE SaleType_cursor

    DEALLOCATE SaleType_cursor

    SET NOCOUNT OFF

    select * from #SaleBiz