0

我已经使用 Eclipse 从 Sybase 数据库运行了一个查询。我需要消除重复的条目,但结果有混合类型 - INT 和 TEXT。Sybase 不会对 TEXT 字段进行区分。当我保存所有结果并将其粘贴到 Excel 中时,一些 TEXT 字段会渗入 INT 字段列 - 这使得 Excel -Remove Duplicates 很难做到。

我想我可能会为我的查询创建一个别名,添加一个临时表,从别名中选择不同的 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 中更好地格式化数据,我就不必在数据库端进行所有这些操作。我在 Excel 导入对话框中尝试了不同的格式。导入为制表符分隔,空格分隔,相同最终结果。

附加信息:我将 TEXT 转换为 VARCHAR 但我现在需要一个新列,有时每个 id 最多有 5 个条目。ID -> TYPE 是 1-many?distinct 在原始列表上有效,但现在我需要弄清楚如何在一行中显示所有新列值和每个 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 回答