SQL - 透视后仅从多个列返回非空值
我的数据每个策略键有多个项目,每个项目一行,如下所示。每个策略键的项目数可能有所不同,最多 10 个项目。
PolicyKey | Item_Description |
---|---|
1234567 | Bike |
1234567 | iPhone |
1234567 | Wedding Ring |
我正在使用枢轴将每个策略键的项目分组,并转入多个列以获得此结果
PolicyKey | [1] | [2] | [3] |
---|---|---|---|
1234567 | Bike | iPhone | Wedding 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.
PolicyKey | Item_Description |
---|---|
1234567 | Bike |
1234567 | IPhone |
1234567 | Wedding 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] |
---|---|---|---|
1234567 | Bike | IPhone | Wedding 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
强力方法是...
当使用
+
而不是CONCAT()
时,如果列为NULL
,则' : ' + col
将产生NULL
,而不是' : '
A brute force approach would be...
When using
+
rather thanCONCAT()
, if a column isNULL
, the' : ' + col
will yieldNULL
, rather than' : '