2013-02-06 55 views
0

我想選擇最前面的2條記錄,並將它們放在由逗號分隔的一列中。Select Top 2 Comma Delimited w/SQL

這是我到目前爲止,但我不能得到它的工作。

UPDATE #Temp 
SET TopTwoInactiveDDSRenewalFeeID = (STUFF (
SELECT TOP 2 ',' + I.InvoiceID 
FROM DB..rInvoice I 
WHERE I.rUltimateEntityID = entID 
AND I.ObjectID = 18 
AND I.ObjectTypeIDRAW = 1741 
AND I.rParentObjectID = 2 
AND I.rParentPK = LicID 
FOR XML PATH ('')),1,2,'') 

) 

消息156,15級,狀態1,第3行
關鍵字附近有語法錯誤 'SELECT'。
Msg 102,Level 15,State 1,Line 10
')'附近的語法不正確。

我使用這個崗位作爲參考,但它不是爲我工作:display the top 3 records in a comma separated in one column

不知道該怎麼寫一個。

+2

什麼並不瞭解它的工作?你有錯誤嗎?你有樣品數據和預期產出嗎? –

+0

Msg 156,Level 15,State 1,Line 3 關鍵字'SELECT'附近的語法不正確。 Msg 102,Level 15,State 1,Line 10 ')'附近語法不正確。 – Auzzy

+0

我最終得到它像這樣工作: 'UPDATE #TEMP SET TopTwoInactiveDDSRenewalFeeID =(SELECT STUFF(( \t SELECT DISTINCT TOP 2 '' + CONVERT(VARCHAR,I.InvoiceID) \t從數據庫。 .rInvoice我 \t WHERE I.rUltimateEntityID = entID \t AND I.ObjectID = 18 \t AND I.ObjectTypeIDRAW = 1741 \t AND I.rParentObjectID = 2 \t AND I.rParentPK = LicID \t ORDER BY '' + CONVERT(varchar,I.InvoiceID) ('')),1,1,'') ) FROM #Temp ' – Auzzy

回答

1

我會嘗試更改以下行。在逗號之後留出空格是STUFF正常工作所必需的。如果您可以將測試數據加載到sqlfiddle http://sqlfiddle.com/,那將會更好。

SELECT TOP 2 ',' + I.InvoiceID 

SELECT TOP 2 ', ' + I.InvoiceID 

這裏有一個你舉個例子,

IF OBJECT_ID('TempDB..#Values') IS NOT NULL 
BEGIN 
DROP TABLE #Values 
END 

IF OBJECT_ID('TempDB..#Temp') IS NOT NULL 
BEGIN 
DROP TABLE #Temp 
END 

CREATE TABLE #Temp 
(
ID     INT 
,CommaDelimited  VARCHAR(500) 
) 
INSERT INTO #Temp 
(
ID 
) 
SELECT 1 

CREATE TABLE #Values 
(
Value    CHAR(1) 
) 

INSERT INTO #Values 
(
Value 
) 
SELECT '1' 
UNION ALL SELECT '2' 
UNION ALL SELECT '3' 
UNION ALL SELECT '4' 


UPDATE #Temp 
SET CommaDelimited = STUFF((SELECT TOP 2 ', '+Value FROM #Values FOR XML PATH('')),1,2,'') 

SELECT * FROM #Temp