0

Sybase データベースから Eclipse を使用してクエリを実行しました。重複するエントリを削除する必要がありますが、結果に INT と TEXT の型が混在しています。Sybase は TEXT フィールドを区別しません。すべての結果を保存してそれを Excel に貼り付けると、TEXT フィールドの一部が INT フィールドの列に流れ込み、Excel の重複の削除が困難になります。

クエリのエイリアスを作成し、一時テーブルを追加し、エイリアスから個別の INT 列の値を選択してから、今度は TEXT 値を含めてエイリアスを再度クエリすることを考えています。次に、データをエクスポートするときに、代わりに Word に保存します。次のようになります。

SELECT id, text
FROM tableA, TableB
WHERE (various joins here...)
AS stuff

CREATE TABLE #id_values
(alt_id CHAR(8) null)

INSERT INTO #id_values
(SELECT DISTINCT id
FROM stuff)

SELECT id, text
FROM stuff a
WHERE EXISTS (SELECT 1 FROM #id_values WHERE b.alt_id = a.id )

Excelでデータをより適切にフォーマットする方法があれば、db側でこのすべての操作を行う必要はありません.Excelインポートダイアログでさまざまなフォーマットを試しました.タブ区切り、スペース区切りでインポート最終結果。

追加情報: TEXT を VARCHAR に変換しましたが、ID ごとに最大 5 つのエントリを持つ新しい列が必要になる場合があります。ID -> TYPE は 1-many ですか? 個別は元のリストで機能しましたが、今度はすべての新しい列の値を 1 つの行に各 ID で表示する方法を理解する必要があります。新しい列は CHAR(4) です。

今、私の元の選択は次のようになります。

SELECT DISTINCT id, CONVERT(VARCHAR(8192), text), type_cd
FROM TableA, TableB
...etc

そして、id にアタッチされた type_cd ごとに複数の行を取得します。また、「b」は必要ないと思うことにも気付きました。*alt_id* の前のエイリアス。

また、クエリの形式 (TEXT または VARCHAR) に関係なく、Excel は引き続きテキストを id 行にブリードします。これは sql の問題ではなく、Excel や Eclipse の問題かもしれません。

4

1 に答える 1

1

とにかく、Excel セルに貼り付けることができるデータの量には制限があるため、テキストを varchar に変換します。

SELECT distinct id, cast(text as varchar(255)) as text
FROM tableA, TableB
WHERE (various joins here...)

私は 255 を使用しています。これは、Excel が表示する既定値であるためです。Excel セルではより長い値を使用できますが、目的にはこれで十分な場合があります。そうでない場合は、値を大きくしてください。

また、コメントとして、"on" 句 (またはカンマの代わりに "cross join") を使用する、結合に適切な構文を使用する必要があります。

于 2012-07-22T16:10:46.280 に答える