2012-07-22 71 views
0

我已經從Sybase數據庫中使用Eclipse運行查詢。我需要消除重複的條目,但結果有混合類型 - INT和TEXT。 Sybase不會在TEXT字段中做出明顯的改變。當我保存所有結果並將其粘貼到Excel中時,一些TEXT字段會滲入到INT字段列中 - 這使Excel刪除重複項變得困難。將所有結果保存到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 side.I所有這些操作在Excel導入對話框中嘗試了多種不同格式的方式。 。導入爲製表符分隔,用相同的最終結果空格分隔。

附加信息:我將TEXT轉換爲VARCHAR,但是現在我需要一個新列,每個ID最多有5個條目。 ID - > TYPE是1-many?獨特的工作原始列表,但現在我需要弄清楚如何顯示與每個id在一行中的所有新的列值。新列是CHAR(4)。

現在我原來的選擇看起來是這樣的:

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

我再次獲得多行每個type_cd連接到一個id。我也意識到我不認爲我需要'b'。別名在* alt_id *之前。

此外,無論我如何格式化查詢(TEXT或VARCHAR),Excel都會繼續將文本放到id行中。也許這不是一個SQL問題,而是Excel或者Eclipse。

回答

1

你在多少數據你可以過去到Excel單元格,無論如何,所以你的文本轉換爲varchar是有限的:

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

我使用的是255,因爲那是什麼Excel中顯示默認。您可以在Excel單元格中擁有更長的值,但這可能足以滿足您的需要。如果不是的話,只需要讓價值更大。

另外,作爲註釋,您應該使用適當的連接語法,它使用「on」子句(或「交叉連接」代替逗號)。

+0

謝謝戈登。轉換髮生在我身上,我想我嘗試了使用convert(varchar(8000),text),我不記得它爲什麼不起作用。有些文本值很長,所以我將VARCHAR做得相當大 - 所以它的大小約爲目前發現的最大的3倍。我明天再來檢查一下,看看我是否錯過了其他的東西。 – djailer 2012-07-22 23:47:09

+0

ooops。編輯完成之前,我離開了該頁面。至於on子句...這是一個外連接 - 當我需要來自兩個表的所有數據時。我錯在假設我只需要內連接?我不想從a.id得到任何不在b.alt_id中的行。 – djailer 2012-07-22 23:57:19