2011-01-06 7 views
1

私が持っているCSVを単一行の列に変換するにはどうすればよいですか?

a,b,c,d,e 

と私は、単一の行の列など、すべてのそれらの変数

a|b|c|d|e -------- 

より多くの例

MISC FEES,UNIV EXE,ID FEE,TENT FEE,CAU FEES,GYM FEE 

この

よう

をしたいようなカンマ区切り変数コンマで区切られた変数です。必要なSQLを使用しています。その他の手数料は、最初の列である単一の行の列の値として

MISCFEES UNIVEXE IDFEE TENTFEE CAUFEES GYMFEE 

列に変換する、univfeeは次の列であるので、

+0

詳細説明が必要です。 – Nishant

+1

どのようなプログラミング言語を使いたいですか? –

+0

sqlまたはtsqlテンポラリテーブルなし –

答えて

0

にSQL Serverは、カンマを追加するための内蔵機能を有していない区切り単一行の列を分離するための値。関数またはストアドプロシージャのいずれかを使ってビルドする必要があります。

CHARINDEXを使用して各区切り文字の位置を確認し、SUBSTRINGを使用すると、各値をカンマで区切ってそれに応じて列を更新できます。

+0

しかし、私は一時テーブルを使用したくありません。それは選択クエリ –

+0

@Vivekを介して行うことができます - ここではテンポラリテーブルは必要ありませんが、ストアドプロシージャまたは関数が必要になります。変数に分割値を格納し、列に使用します。 1つだけの選択クエリを使用して、それが私の知る限りでは不可能です。 –

0

以下の関数は、コンマで区切られたリスト の各値をカラムに分割し、テーブルを返します。

CREATE FUNCTION [dbo].[fn_CommaDelimitedToTable] 
    (
     @String AS varchar(MAX) 
    ) 
RETURNS @RetTable Table (DataValue varchar(500)) 
AS BEGIN 
    DECLARE @ReturnedTable Table (DataValue varchar(500)) 
    DECLARE @BreakLoop Int 
    DECLARE @CharIndex Int 
    DECLARE @StringTmp Varchar(MAX) 
    DECLARE @WrdTmp Varchar(500) 
    DECLARE @Count Int 
    SET @StringTmp = @String 
    SET @Count = 0 
    SET @BreakLoop = 0 
    WHILE @BreakLoop = 0 
     BEGIN 
      SET @CharIndex = CHARINDEX(',', @StringTmp, 1) 
      IF @CharIndex = 0 OR @CharIndex IS NULL 
       BEGIN 
        SET @WrdTmp = Ltrim(Rtrim(@StringTmp)) 
        SET @BreakLoop = 1 
       END 
      ELSE 
       BEGIN 

        SET @WrdTmp = ltrim(rtrim(Left(@StringTmp, @CharIndex - 1))) 

        SET @StringTmp = Ltrim(rtrim(Right(@StringTmp, 
                 Len(@StringTmp) 
                 - Len(@WrdTmp) - 1))) 
       END 

      INSERT INTO @ReturnedTable (DataValue) 
      VALUES (@WrdTmp) 
      SET @WrdTmp = '' 
      SET @Count = @Count + 1 
      IF @BreakLoop = 1 
       BEGIN 
        BREAK 
       END 
      ELSE 
       BEGIN 
        CONTINUE 
       END 
     END 
    INSERT INTO @RetTable 
      SELECT DataValue 
      FROM @ReturnedTable 
    RETURN 
    END 
+0

実際には、私は答えを読み返しました。私の応答は、各値を列として、各値を列としてではなくテーブルを作成します。 – Jamiegs

関連する問題