2010-03-19 282 views
0

我有了以下的柱噸-SQL字符串連接

Type 
-------- 
type 1 
type 2 
type 3 

如何可以轉換上述爲字符串等(「類型1」,「2型」,「類型3」)

一個表

我想在IN子句中使用我的t-sql查詢中的輸出。像從表A中選擇*,其中SomeColumn IN( '1型', '2型',類型3' )

我用以下拿出輸出(1型,2型,3型)

select '(' + STUFF((select ', ' + Type from TableA for xml path ('')),1,2,'') + ')' 

但是不知道如何插入單引號。

+0

選擇「」「空」「」 – garik 2010-03-19 22:30:47

+0

@CResults:*「請看我的回答如下」 *那是什麼意見的地步?他已經收到了你已經回答的通知,你的代表明確知道某人。所以...?! – 2010-03-19 22:46:48

+0

@TJ評論刪除:-) – CResults 2010-03-19 23:05:32

回答

1

通常的方法是使用子查詢:

select * from TableA where SomeColumn IN (
    select Type from TheOtherTable 
) 

我猜你必須在子選擇一個where條款也是如此。

根據複雜性,有時你這樣做與外部連接,而不是:

select * from TableA a 
left outer join TheOtherTable b on a.SomeColumn = b.Type 
where b.Type is not null 

使用哪種取決於你從TableA適用於這兩種記錄的標準,我已經叫TheOtherTable(中一個與Type)。

+0

我已經嘗試過,它似乎並不正在工作。但同樣的方法在處理整數數據類型時工作 – stackoverflowuser 2010-03-19 22:30:53

+0

@stackoverflowuser:我用'varchar'列大量次使用了這個;這不是列類型的問題。你希望確保'null'不會作爲子選擇符的結果出現,是你的子選項'where'來確保?你提供的信息越多,真的越好。 – 2010-03-19 22:33:54

+0

你是對的。我嘗試了一個示例表,這似乎工作。但它不適用於我的桌子。所以這裏是整個事情 - 我有一個用戶定義函數,返回一個表(ID int,TypeName varchar(8000)) 我這樣做select * from TableA其中Type in(從dbo.udf_MyFunction中選擇TypeName(someinput) ) 但上述不起作用。 – stackoverflowuser 2010-03-19 22:49:02

0

無論您何時需要報價,double類型它

所以'變爲 ''

使你的代碼變得

select '(' + STUFF((select ''',''' + Type from TableA for xml path ('')),1,2,'') + ''')' 

上面產生

('type 1','type 2','type 3') 
+1

??爲什麼-1? – CResults 2010-03-19 22:44:41

1

試試吧爲了好玩:)

declare @s1 varchar(8000) 
declare @s2 varchar(8000) 

update t 
    set 
    @s1 = ISNULL(@s1 + ',', '') + '''' + REPLACE(t.Type, '''', '''''') + '''' 
    ,@s2 = 'select * from TableA where Type IN (' + @s1 + ')' 
from TableA t 

select @s2 

REPLACE(t.Type, '''', '''''') - 如果字段在字段的文本中有任何撇號,REPLACE會將其加倍。嘗試改變TYPE1typ'e1typ''e1在表表A

我停在開玩笑......

儘量避免在子句和子查詢。他們工作非常緩慢(表掃描等...)! 使用此:

select a.Type 
from TableA a 
    inner join TheOtherTable b 
    on a.Type = b.Type