1

我正在尝试使用该string_agg功能,convert(varchar(max))因为结果超出了 8000 个字符的限制,但现在我在下面遇到语法错误

WITHIN GROUP (ORDER BY PURP.PROGRAM_YEAR DESC) AS 'GS SUMMARY'

这是我所拥有的:

SELECT DISTINCT
    tbl1.ID_NUMBER,
    STRING_AGG(CONVERT(VARCHAR(MAX), 'PROPOSAL# ', pro.PROPOSAL_ID,': ', purp.PROGRAM_YEAR,', ', tpro.SHORT_DESC, ', ', tsub.SHORT_DESC, ', ASK: ',
                FORMAT(pro.ORIGINAL_ASK_AMT,'C0','en-us'),', ANTIC: ', 
                FORMAT(pro.ANTICIPATED_AMT,'C0','en-us'), ', UNIT: ', 
                pro.UNIT_CODE, ', SUBMITTER: ',
                purp.SUBMITTER, ', BENEFIT UNIT: ', TFUND.SHORT_DESC), ';') WITHIN GROUP (ORDER BY PURP.PROGRAM_YEAR DESC) AS 'SUMMARY' 
FROM
    TABLE1 tbl1
4

2 回答 2

0

万一其他人遇到这个问题,我找到了答案。我可以通过添加 concat 函数来解决它:

, STRING_AGG(CONVERT(VARCHAR(max), CONCAT('PROPOSAL# ', pro.PROPOSAL_ID,': ', purp.PROGRAM_YEAR,', ', tpro.SHORT_DESC, ', ', tsub.SHORT_DESC, ', ASK: '
                , FORMAT(pro.ORIGINAL_ASK_AMT,'C0','en-us'),', ANTIC: ', FORMAT(pro.ANTICIPATED_AMT,'C0','en-us'), ', UNIT: ', pro.UNIT_CODE, ', SUBMITTER: '
                , purp.SUBMITTER, ', BENEFIT UNIT: ', TFUND.SHORT_DESC)), '; ') 
                WITHIN GROUP (ORDER BY PURP.PROGRAM_YEAR DESC) AS 'SUMMARY'
 
于 2022-01-28T17:42:23.097 回答
0

尝试使用CONCAT

然后将连接的字符串CAST 或 CONVERT 转换为VARCHAR(MAX)

, STRING_AGG(CAST(CONCAT(
  'PROPOSAL# ', pro.PROPOSAL_ID,
  ': ', purp.PROGRAM_YEAR,
  ', ', tpro.SHORT_DESC, 
  ', ', tsub.SHORT_DESC, 
  ', ASK: ', FORMAT(pro.ORIGINAL_ASK_AMT,'C0','en-us'), 
  ', ANTIC: ', FORMAT(pro.ANTICIPATED_AMT,'C0','en-us'), 
  ', UNIT: ', pro.UNIT_CODE, 
  ', SUBMITTER: ', purp.SUBMITTER, 
  ', BENEFIT UNIT: ', TFUND.SHORT_DESC
  ) AS VARCHAR(MAX)), ';') WITHIN GROUP (ORDER BY PURP.PROGRAM_YEAR DESC) AS SUMMARY

ACONVERT并不期望有那么多参数。

于 2022-01-28T15:49:33.890 回答