【发布时间】:2015-08-24 17:08:07
【问题描述】:
我需要从 3 列中获取值并将它们分组为 1 列,以逗号分隔:
2014-01-01,2014-01-29
问题是一个或多个列可以为 NULL,因此它会弄乱逗号:
2014-01-01,,2014-01-29
这就是我的编码方式(case语句基本上只是去掉一个逗号,如果它是字符串中的最后一个字符。
我需要添加一些逻辑,以便将 NULL 考虑在内,但我很难想出它。
CASE WHEN RIGHT(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate, 1) = ','
THEN LEFT(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate, LEN(ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate) - 1)
ELSE ISNULL(d.FirstGapDate + ',', '') + ISNULL(d.PayrollGapDate + ',', '') + d.LastGapDate
END AS AlLGapDatesFormatted
编辑 -
我需要对突出显示的部分进行分组(注意 PayrollGapDate 是 ''):
这就是我得到的:
这是我实现的代码:
【问题讨论】:
-
为什么要这样对自己?像这样存储数据违反了 1NF,只会带来痛苦。
-
有several的例子说明如何在sql server中分割字符串。您尝试过其中任何一个吗? (也对@SeanLange 的评论 +1,更改您的数据)
-
@xQbert:这只在只有中间值为空的特定情况下才能解决。还有其他六种可能不起作用的情况。
-
所有,我不存储这些数据。这是一个需要有这个“计算”列的报告。
标签: sql sql-server