我有一个非常简单的查询返回Notes字段。既然可以有多个音符,我只想要前2个。没问题。但是,我将在另一个查询中使用sql。我的结果中我真的不想要2行。我想将结果合并为1个字段值,因此我在结果中只有1个结果行。这可能吗?
例如,我目前得到以下内容:
12345 1001 500.00 "Note 1"
12345 1001 500.00 "Note 2"
我希望看到的是:
12345 1001 500.00 "Note 1 AND Note 2"
以下是sql:
select top 2 rcai.field_value
from rnt_agrs ra
inner join rnt_agr_inv_notes rain on ra.rnt_agr_nbr=rain.rea_rnt_agr_nbr
inner join RNT_CUST_ADDNL_INFO rcai on rain.rea_rnt_agr_nbr=rcai.rea_rnt_agr_nbr and rain.bac_acc_id=rcai.bac_acct_id
where ra.rnt_agr_nbr=128260511
感谢您的帮助。我很感谢这个论坛帮助解决这些问题......
答案 0 :(得分:1)
获取下一行的值并过滤除第一行以外的所有内容:
select ..., rcai.field_value || ' AND '
min(rcai.field_value) -- next row's value (same as LEAD in Standard SQL)
over (partition by ra.rnt_agr_nbr
order by rcai.field_value
rows between 1 following and 1 following) as next_field_value
from rnt_agrs ra
inner join rnt_agr_inv_notes rain on ra.rnt_agr_nbr=rain.rea_rnt_agr_nbr
inner join RNT_CUST_ADDNL_INFO rcai on rain.rea_rnt_agr_nbr=rcai.rea_rnt_agr_nbr and rain.bac_acc_id=rcai.bac_acct_id
where ra.rnt_agr_nbr=128260511
qualify
row_number() -- only the first row
over (partition by ra.rnt_agr_nbr
order by rcai.field_value) = 1
如果可能只有一行,则需要添加COALESCE(min...,'')
以消除NULL。
两个OLAP函数都指定相同的PARTITION和ORDER,因此这是一个单一的工作步骤。
答案 1 :(得分:0)
select *,(SELECT top 2 rcai.field_value + ' AND ' AS [text()]
FROM RNT_CUST_ADDNL_INFO rcai
WHERE rcai.rea_rnt_agr_nbr = rain.rea_rnt_agr_nbr
AND rcai.bac_acct_id=rain.bac_acc_id
FOR XML PATH('')) AS Notes
from
rnt_agrs ra inner join rnt_agr_inv_notes rain
on ra.rnt_agr_nbr=rain.rea_rnt_agr_nbr
我有类似的东西,其中有1到多个,我想在一个列中使用分号分隔的一组值与主记录。
答案 2 :(得分:0)
您可以使用PIVOT
根据行号将两个音符行转换为两个音符列,然后将它们连接起来。这是一个例子:
SELECT pvt.[1] + ' and ' + pvt.[2]
FROM
( --the selection of your table data, including a row-number column
SELECT Msg, ROW_NUMBER() OVER(ORDER BY Id)
--sample data shown here, but this would be your real table
FROM (VALUES(1, 'Note 1'), (2, 'Note 2'), (3, 'Note 3')) Note(Id, Msg)
) Data (Msg, Row)
PIVOT (MAX(Msg) FOR Row IN ([1], [2])) pvt
请注意,MAX
用于PIVOT中的聚合,因为需要聚合,但由于ROW_NUMBER
是唯一的,因此您只聚合单个值。
这也可以很容易地扩展到前N行 - 只需在枢轴中包含您想要的行号,并在select语句中根据需要将它们组合在一起。