我有一个表格Expression e = new ExpressionBuilder("3 * sin(y) - 2 / (x - 2)")
.variables("x", "y")
.build()
.setVariable("x", 2.3)
.setVariable("y", 3.14);
double result = e.evaluate();
,其中包含CommentsTable
。
所有评论列均为CommentA, CommentB, CommentC, CommentD, CommentE
,默认情况下,所有列均为VARCHAR (200)
。
数据如下:
NULL
我需要避免使用空值,其余值与CommentId CommentA CommentB CommentC CommentD CommentE
---------------------------------------------------------------------
12345 NULL C 001 C 002 NULL C 003
45678 C 005 NULL NULL C 007 NULL
67890 C 010 NULL C 011 C 012 NULL
36912 C 021 C 023 C 024 C 025 C 026
连接。
所以,预期的输出如:
comma
我尝试了简单的查询:
CommentId CommetDetails
-------------------------------
12345 C 001, C 002, C 003
45678 C 005, C 007
67890 C 010, C 011, C 012
36912 C 021, C 023, C 024, C 025, C 026
但发生了不受欢迎的SELECT CommentId, ISNULL(CommentA, '') + ', ' + ISNULL(CommentB, '') + ', ' +
ISNULL(CommentC, '') + ', ' + ISNULL(CommentD, '') + ', ' +
ISNULL(CommentE, '') [CommentDetails]
FROM CommentsTable
WHERE ...... --Some conditions
,因此添加了comma
IIF
但是在这里,SELECT CommentId,
IIF(ISNULL(CommentA, '') <> '', (CommentA + ', '), '') +
IIF(ISNULL(CommentB, '') <> '', (CommentB + ', '), '') +
IIF(ISNULL(CommentC, '') <> '', (CommentC + ', '), '') +
IIF(ISNULL(CommentD, '') <> '', (CommentD + ', '), '') +
ISNULL(CommentE, '') [CommentDetails]
FROM CommentsTable
WHERE ...... --Some conditions
发生在某些情况的最后一个位置(如果comma
是CommentD, CommetE
。
有没有办法解决所有案件。
答案 0 :(得分:9)
您可以像ISNULL
一样使用ISNULL(',' + CommentA, '')
并像这样写下您的查询。
SELECT CommentId,
STUFF(
ISNULL(',' + CommentA, '') +
ISNULL(',' + CommentB, '') +
ISNULL(',' + CommentC, '') +
ISNULL(',' + CommentD, '') +
ISNULL(',' + CommentE, ''),1,1,'') as [CommentDetails]
FROM CommentsTable
WHERE ...... //Some conditions
请参阅SQL Fiddle中的结果。
答案 1 :(得分:1)
以上答案是正确的,并且没有对接受的答案提出质疑,但是如果某些列有空字符串而不是null,则下面的内容可能会有所帮助。如果出现问题,请不要犹豫,采取更好的方法并纠正我。
SELECT CommentId,
STUFF(
ISNULL(',' + CASE WHEN CommentA= '' THEN NULL ELSE CommentA END, '') +
ISNULL(',' + CASE WHEN CommentB= '' THEN NULL ELSE CommentB END, '') +
ISNULL(',' + CASE WHEN CommentC= '' THEN NULL ELSE CommentC END, '') +
ISNULL(',' + CASE WHEN CommentD= '' THEN NULL ELSE CommentD END, '') +
ISNULL(',' + CASE WHEN CommentE= '' THEN NULL ELSE CommentE END, ''),1,1,'') as [CommentDetails]
FROM CommentsTable
答案 2 :(得分:0)
create table #test
(
CommentId int,
CommentA nvarchar(200),
CommentB nvarchar(200),
CommentC nvarchar(200),
CommentD nvarchar(200),
CommentE nvarchar(200)
)
insert into #test values(12345,NULL,'C 001','C 002',NULL,'C 003')
insert into #test values(45678,'C 005',NULL,NULL,'C 007',NULL)
insert into #test values(67890,'C 010',NULL,'C 011','C 012',NULL)
insert into #test values(36912,'C 021','C 023','C 024','C 025','C 026')
使用此代码:
select CommentId,STUFF(ISNULL(','+CommentA,'')+
ISNULL(','+CommentB,'')+
ISNULL(','+CommentC,'')+
ISNULL(','+CommentD,'')+
ISNULL(','+CommentE,''),1,1,'') As Comment
from #test
order by CommentId