我的数据表如下(表1)
Table1
------------------------------------------
ID | IPaddress | Port | Value
----|---------------|-------|-------------
1 | xx.yy.14.15 | 332 | This is good
------------------------------------------
2 | xx.yy.14.15 | 332 | I can work
------------------------------------------
3 | xx.yy.12.12 | 400 | Looks ok
------------------------------------------
4 | xx.yy.12.12 | 400 | can I work
------------------------------------------
5 | xx.yy.12.12 | 400 | Yes, please
-------------------------------------------
6 | xx.yy.14.16 | 401 | How is this
-------------------------------------------
7 | xx.yy.14.16 | 401 | Looks ok
-------------------------------------------
8 | xx.yy.14.16 | 401 | can I work
-------------------------------------------
9 | xx.yy.14.16 | 401 | Yes, please
-------------------------------------------
所需的结果表:
ID | IPaddress | Port | Value
----|---------------|-------|-----------------------------------------------------------
1 | xx.yy.14.15 | 332 | This is good and I can work
--------------------------------------------------------------------------------------
2 | xx.yy.12.12 | 400 | Looks ok and can I work and Yes, please
---------------------------------------------------------------------------------------
3 | xx.yy.14.16 | 401 | How is this and Looks ok and can I work and Yes, please
---------------------------------------------------------------------------------------
这是我尝试过的:
DECLARE @VAR1 VARCHAR(50)
DECLARE @VAR2 VARCHAR(50)
SELECT @VAR1 = T1.VALUE,@VAR2=T2.VALUE
FROM TABLE1 AS T1 INNER JOIN TABLE1 AS T2 ON T1.ID =T2.ID
WHERE T1.IPADDRESS =T2.IPADDRESS
SELECT IPADDRSS,PORT,@VAR1 + ' AND ' +@VAR2 FROM
SELECT T1.*,
ROW_NUMBER() OVER (PARTITION BY T1.IPADDRESS,T1.PORT ORDER BY VALUE) AS NM
FROM TABLE1 AS T1
)TBL
WHERE NM = 1
但是,从上面的查询中,如果只有 2 个重复行,我能够实现所需的输出(注意:这里我将 IPADDRESS 和 PORT 视为重复,而其他列不重复)
但是,当 3 行或 4 行或 5 行中有相同的 IPADDRESS 和 PORT 时,如何实现我想要的结果?请注意,具有相同 IPADDRESS 和 PORT 的行数是动态的,有时可能会超过 10。那么,如何在获得理想结果的同时处理这种动态情况?
希望我正确解释了这一点。请帮忙。谢谢
刚刚看到您的评论:SQL 2017。应该提前说过,我一直在研究一种让我感到悲伤的老式聚合技术。SQL 2017 为我们提供了早就应该使用的 string_agg 函数,这使它变得非常简单:
SELECT
row_number() over (order by IPaddress, Port) ID
,IPaddress
,Port
,string_agg(Value, ' and ')
from Table1
group by
IPaddress
,Port
如果订购很重要,您可能需要稍微研究一下。
@KeithL 的版本也可以,只需进行一些调试……我看到您刚刚解决了这个问题。我,我只是不太喜欢 XML,这就是我研究替代方案的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句