SQL - 透视后仅从多个列返回非空值

发布于 2025-01-09 16:56:10 字数 1060 浏览 0 评论 0原文

我的数据每个策略键有多个项目,每个项目一行,如下所示。每个策略键的项目数可能有所不同,最多 10 个项目。

PolicyKeyItem_Description
1234567Bike
1234567iPhone
1234567Wedding Ring

我正在使用枢轴将每个策略键的项目分组,并转入多个列以获得此结果

PolicyKey[1][2][3]
1234567BikeiPhoneWedding Ring

因为我没有想要从我的数据透视表中选择可能的 10 列(即每个项目描述一列)我将这些列连接成一个我的 SELECT 语句中的列如下:

SELECT CONCAT(c.[1],' : ',c.[2],' : ',c.[3],' : ',c.[4], ' : ',c.[5],' : ',c.[6],' : ',c.[7],' : ',c.[8],' : ',c.[9],' : ',c.[10])) AS AllItems

问题是对于那些项目数为一或两个的策略键,我的 CONCAT 语句将包含一个数字单元格末尾的“:”字符(即我的 CONCAT 语句中的分隔符)。

是否有任何函数可以仅返回多列中的非空值?因为我的数据透视表的结果可能有 1 个非空列和 9 个空列,所以我希望能够从 10 个列表中仅选择非空列。

我应该提到我正在 SSMS 2012 中工作,所以我无法使用 SSMS 更高版本中提供的任何新功能

提前致谢

My data has multiple items per policy key with one row per item like the below. The number of items can vary per policy key up to a max of 10 items.

PolicyKeyItem_Description
1234567Bike
1234567IPhone
1234567Wedding Ring

I am using a pivot to group items up per policy key and pivot into multiple columns to get this result

PolicyKey[1][2][3]
1234567BikeIPhoneWedding Ring

As I don't want to select potentially 10 columns from my pivot (i.e. one for each item description) I am concatenating these into one column in my SELECT statement as follows:

SELECT CONCAT(c.[1],' : ',c.[2],' : ',c.[3],' : ',c.[4],' : ',c.[5],' : ',c.[6],' : ',c.[7],' : ',c.[8],' : ',c.[9],' : ',c.[10])) AS AllItems

The problem is for those policy keys where the number of items is say one or two, my CONCAT statement will include a number of ' : ' characters (i.e. the seperator in my CONCAT statement) at the end of the cell.

Is there any function that can return only the non-null values in multiple columns? Because the result of my pivot can potentially have say 1 non null column and 9 null columns, I'd like to be able to select only the non-null columns from the list of 10.

I should mention I am working in SSMS 2012 so am not able to use any of the new functions available in later version of SSMS

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

双手揣兜 2025-01-16 16:56:10

强力方法是...

CONCAT(
  c.[1],
 (' : ' + c.[2]),
 (' : ' + c.[3]),
  ...
)

当使用 + 而不是 CONCAT() 时,如果列为 NULL,则 ' : ' + col 将产生 NULL,而不是 ' : '

A brute force approach would be...

CONCAT(
  c.[1],
 (' : ' + c.[2]),
 (' : ' + c.[3]),
  ...
)

When using + rather than CONCAT(), if a column is NULL, the ' : ' + col will yield NULL, rather than ' : '

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文