选择Top 2 Comma Delimited w / SQL

时间:2013-02-06 21:54:08

标签: sql sql-server tsql

我正在尝试选择前2条记录并将它们放在一个以逗号分隔的列中。

这是我到目前为止所做的,但我无法让它发挥作用。

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,'')

)
  

Msg 156,Level 15,State 1,Line 3
  关键字'SELECT'附近的语法不正确。
  Msg 102,Level 15,State 1,Line 10
  ')'附近的语法不正确。

我使用这篇文章作为参考,但它对我不起作用:display the top 3 records in a comma separated in one column

不知道怎么写这个。

1 个答案:

答案 0 :(得分: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